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

时间:2012-09-20 02:53:14

标签: java

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

例如,如果我的方法被赋予路径:/home/user/test作为路径,它将返回该目录中及其下的所有文件的路径。

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

如果subdir1里面有一个名为subsubdir的目录,并且在file3.txt内,那么为该文件创建的字符串将是/subdir1/subsubdir/file3.txt,如果还有更多将继续的子目录。

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

我知道它有点令人困惑,但我确信有人可以理解它。现在我所拥有的是一个递归函数,它打印出文件名及其绝对路径。

对此有何帮助?

4 个答案:

答案 0 :(得分:3)

如果你尝试了一些事情并询问了有关这个问题的话会有什么好处......

...然而

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;
    }
}

你可以简单地做一个正常的文件夹递归,返回一个文件列表和那个前缀的条带,但这取决于你

答案 1 :(得分:1)

如何使用您当前拥有的绝对路径,但使用String.replace

从中删除前缀

你说你有完整的绝对路径,比如 full 然后就这样做

String relative = full.replace(prefix, "");

答案 2 :(得分:0)

如果您输入“/ home / user / text”,则文件的所有绝对路径都将以/ home / user / text /开头。如果您已经能够在text /下打印所有文件的列表,那么您需要做的就是选择合适的子字符串。

以下函数应访问pathToDir下的所有文件。在printFileName函数中,您可以删除/ home / user / text部分并打印文件名

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);
    }
}

答案 3 :(得分:0)

对于找到的每个文件,请打印file.getAbsolutePath().substring(rootPath.length());