2014-10-06 65 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