【问题标题】:Java - Display relative path to a root directoryJava - 显示根目录的相对路径
【发布时间】:2014-10-06 05:58:46
【问题描述】:

我正在编写一个小的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

我的问题是我可以只显示没有“根目录”的相对路径吗?

即我想要实现的是显示:

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

我不喜欢使用任何String 方法来不显示该部分。 谢谢!

【问题讨论】:

    标签: java path


    【解决方案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);
    }
    

    【讨论】:

    • 如果子目录被命名为“根目录”怎么办?
    • @JBNizet 它是 OP 用于根目录的占位符,正如您在问题中看到的那样。
    • 你不明白。想象rootDir 用“foo”初始化。想象一下 foo 目录包含foo/foo/foo/foo.txt。现在想象一下 rootDir 用/ 初始化(因为你想显示根目录下的所有内容)。在这两种情况下,您的代码都会失败。
    • 感谢您的回答,但正如@JBNizer 指出的那样,当两个文件/目录具有相同的名称时,使用replace 可能会导致问题。
    • @Gisonrg 你能举个例子吗?
    猜你喜欢
    • 2011-12-19
    • 2017-03-24
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多