2014-10-06 66 views
0

我正在編寫一個小的Java程序以遞歸方式列出根目錄中的文件。這是我使用的代碼。Java - 顯示到根目錄的相對路徑

public static void displayDirectoryContents(File dir) { 
    File[] files = dir.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      displayDirectoryContents(file); 
     } else { 
      System.out.println(file.getPath()); 
     } 
    } 
} 

public static void main(String[] args) throws IOException { 
    File currentDir = new File("root-direcotry"); 
    displayDirectoryContents(currentDir); 
} 

我得到的結果是一樣的東西:

root-direcotry/1.txt 
root-direcotry/2.txt 
root-direcotry/t1/a.txt 
root-direcotry/t2/b.txt 
root-direcotry/t4/c.txt 

我的問題是,我可以只顯示相對路徑沒有「根direcotry」?

即我想要實現的是顯示:

/1.txt 
/2.txt 
/t1/a.txt 
/t2/b.txt 
/t4/c.txt 

我不想用任何String方法,只是不顯示的那部分。 謝謝!

回答

1

試試這個:

public static void displayDirectoryContents(File dir, String rootDir) { 
    File[] files = dir.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      displayDirectoryContents(file, rootDir); 
     } else { 
      System.out.println(file.getPath().replaceFirst(rootDir, "")); 
     } 
    } 
} 

public static void main(String[] args) throws IOException { 
    String rootDir = <rootDir>; 
    File currentDir = new File(rootDir); 
    displayDirectoryContents(currentDir, rootDir); 
} 
+0

如果什麼子目錄被命名爲 「根direcotry」? – 2014-10-06 06:21:30

+0

@JBNizet它是OP用於根目錄的佔位符,正如您在問題中所看到的。 – Jens 2014-10-06 06:22:35

+0

你不明白。想象一下'rootDir'是用「foo」初始化的。假設foo目錄包含'foo/foo/foo/foo.txt'。現在想象一下rootDir是用'/'初始化的(因爲你想顯示根目錄下的所有東西)。在這兩種情況下,您的代碼都會失敗。 – 2014-10-06 06:32:21