2

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

例如,如果我的方法被赋予 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

这个想法是我只想要文件上方的目录路径而不是绝对路径,所以只有初始给定路径之后的目录。

我知道这有点令人困惑,但我相信有人能理解它。现在我只有一个递归函数,它打印出文件名和它们的绝对路径。

对此有任何帮助吗?

4

4 回答 4

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

你可以简单地做一个普通的文件夹递归,返回一个文件列表,然后去掉前缀,但这取决于你

于 2012-09-20T03:06:26.153 回答
1

如何使用您当前拥有的绝对路径但使用String.replace从中删除前缀

你说你有完整的绝对路径,完整
地说 然后就做

String relative = full.replace(prefix, "");
于 2012-09-20T03:11:29.680 回答
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);
    }
}
于 2012-09-20T03:04:20.283 回答
0

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

于 2012-09-20T03:07:19.040 回答