2012-09-20 100 views
0

我需要從給定目錄中獲取java文件及其父目錄的路徑,但不包括它。從java中的目錄和子目錄列出文件,其中只包括部分文件路徑

因此,例如,如果我的方法的路徑爲:/home/user/test作爲路徑,它將返回該目錄下的所有文件的路徑。

所以,如果/home/user/test有子文件夾:/subdir1/subdir2每片含file1.txtfile2.txt那麼該方法的結果將是包含/subdir1/file1.txt/subdir2/file2.txt

而且2串如果subdir1有一個目錄裏面名爲subsubdir和內那file3.txt,那麼爲該文件創建的字符串將是/subdir1/subsubdir/file3.txt,並且如果有更多的子目錄將繼續。

這個想法是我只想在文件上方的目錄路徑,但不是絕對路徑,所以只有初始給定路徑後的目錄。

我知道它有點混亂,但我確定有人可以理解它。現在我只有一個遞歸函數,可以輸出文件名及其絕對路徑。

對此有何幫助?

+0

你是什麼意思*部分文件路徑*?在你的文章中,它是根相對的'/ home/user/test' – adatapost

+0

如果你有絕對路徑,簡單地砍掉它們的初始部分等於你的目錄,例如。 '/ home/user/test/quick/brown/fox.txt'在關閉最初的'/ home/user/test /'部分後變成'quick/brown/fox.txt'。 – dasblinkenlight

回答

2

什麼本來不錯,如果你曾經嘗試的東西,被問及的問題...

然而...

public class TestFileSearch { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new TestFileSearch(); 
    } 

    public TestFileSearch() { 
     File parentPath = new File("C:/Users/shane/Documents"); 
     List<String> files = list(parentPath); 

     for (String file : files) { 
      System.out.println(file); 
     } 
    } 

    protected List<String> list(File parent) { 
     return listFiles(parent, parent); 
    } 

    protected List<String> listFiles(File parent, File folder) { 
     List<String> lstFiles = new ArrayList<String>(25); 
     if (folder.isDirectory()) { 

      File[] files = folder.listFiles(); 
      if (files != null) { 
       for (File file : files) { 
        if (file.isDirectory()) { 
         lstFiles.addAll(listFiles(parent, file)); 
        } else { 
         String path = file.getPath(); 
         String offset = parent.getPath(); 

         path = path.substring(offset.length()); 
         lstFiles.add(path); 
        } 
       } 
      } 
     } 

     return lstFiles; 
    } 
} 

你可以簡單地做一個普通文件夾遞歸,返回文件列表和前綴的THEN條,但是這取決於你

0

如果您有輸入「/ home/user/text」,文件的所有絕對路徑將以/ home/user/text /開頭。如果您已經能夠在text /下打印所有文件的列表,那麼您只需要使用合適的子字符串。

以下函數應該訪問pathToDir下的所有文件。在printFileName功能,可以刪除/家庭/用戶/文本部分和打印文件名

public static void gotoAllFiles(File pathToDir) { 
    if (pathToDir.isDirectory()) { 
     String[] subdirs = pathToDir.list(); 
     for (int i=0; i<subdirs.length; i++) { 
      gotoAllFiles(new File(pathToDir, subdirs[i])); 
     } 
    } else { 
     printFileName(pathToDir); 
    } 
} 
+0

好的,有沒有簡單的方法來分開它們而不必指定字符串的數量?因爲子字符串函數接受一個int,但獲得一個字符串的長度返回一個長和投射它會導致問題。 –

+0

你是什麼意思的一個字符串的「計數」? 字符串的長度幾乎不會超出int的範圍。你可以放心地使用(int)longLength。 – Osiris

0

對於每個文件找到,印花T他file.getAbsolutePath().substring(rootPath.length());

1

怎麼樣使用你目前擁有的絕對路徑,但在移除使用String.replace

從它的前綴,你說你有完整的,絕對路徑,比如說在
然後就去做

String relative = full.replace(prefix, ""); 
相關問題