文件遍历不返回绝对路径,仅文件名

时间:2019-04-27 14:09:16

标签: java arraylist nio jfilechooser

我的桌面上有一个文件夹,其结构类似于以下内容:

-/documents
   -/00
     -1.html
     -2.html
   -/01
     -3.html
     -4.html
   -/02
     -5.html
     -6.html

我想将所有文件保存在/documents中,所以我做到了:

ArrayList<String> paths = new ArrayList<String>();
    fc = new JFileChooser();
    fc.setMultiSelectionEnabled(true);
    fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    fc.showOpenDialog(fc);
    File[] file = fc.getSelectedFiles();
    for (File f : file) {
        try {
            Files.walk(Paths.get(f.getAbsolutePath())).filter(Files::isRegularFile)
                    .forEach(p -> paths.add(p.getFileName().toString()));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    return paths;

但是我只得到文件名,像这样:

1.html
2.html

等等我找不到这样的方法来获取每个文件路径:

/documents/00/1.html
/documents/00/2.html
/documents/01/3.html
/documents/01/4.html

等等 使用p.getFileName().toAbsolutePath()并不能解决问题,我得到的路径就像它们在我的工作空间内一样:

C:\Users\n\workspace\test\1.html

1 个答案:

答案 0 :(得分:2)

请尝试使用p.getFileName().toString(),而不要使用p.toString()。您应该获得所有文件的实际路径输出。

我创建了一个类似的结构,并且如果我按以下方式运行上述程序:

ArrayList<String> paths = new ArrayList<String>();
    JFileChooser fc = new JFileChooser();
    fc.setMultiSelectionEnabled(true);
    fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    fc.showOpenDialog(fc);
    File[] file = fc.getSelectedFiles();
    for (File f : file) {
        System.out.println(f.getAbsolutePath());
        try {
            Files.walk(Paths.get(f.getAbsolutePath())).filter(Files::isRegularFile)
                    .forEach(p -> paths.add(p.toString()));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    System.out.println(paths);

我得到以下输出:

[D:\ document \ 00 \ 1.html,D:\ document \ 00 \ 2.html,D:\ document \ 01 \ 3.html]

这是您期望的输出吗?