小编典典

列出Java中目录和子目录中的文件,仅包括部分文件路径

java

我需要从给定目录获取文件及其父目录的路径,但不包括它。

因此,例如,如果给我的方法指定path:/home/user/test作为路径,它将返回该目录及其下所有文件的路径。

因此,如果/home/user/test有子文件夹:,/subdir1并且/subdir2每个包含file1.txtfile2.txt则该方法的结果将是2个字符串,其中包含/subdir1/file1.txt/subdir2/file2.txt

并且如果subdir1在其中有一个目录,该目录中subsubdirfile3.txt,则为该文件创建的字符串将为/subdir1/subsubdir/file3.txt,并且如果还有其他子目录可以继续。

我的想法是我只想要文件上方的目录路径,而不是绝对路径,因此只希望初始给定路径之后的目录。

我知道它有些混乱,但是我相信有人可以理解它。现在,我所拥有的只是一个递归函数,它可以打印出文件名及其绝对路径。

有什么帮助吗?


阅读 274

收藏
2020-10-16

共1个答案

小编典典

如果您尝试过一些事情并询问有关该问题的信息,那将会很好。

然而…

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条,但这取决于您

2020-10-16