如何将Java nio文件的walk()结果存储到String列表中?

时间:2018-02-02 09:32:37

标签: java java-8 nio

我正在使用Java 8,我有以下代码,其中列出了目录。

try (Stream<Path> paths = Files.walk(Paths.get("D:/MyDir"))) {
    paths.forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

我想将结果存储到List<String>,如果它是目录,则需要后缀\。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

你问的不是那么难:

    try (Stream<Path> paths = Files.walk(Paths.get("c:"))) {
        List<String> list = paths
                .map(path -> Files.isDirectory(path) ? path.toString() + '/' : path.toString())
                .collect(Collectors.toList());
    } catch (IOException e) {
        e.printStackTrace();
    }

答案 1 :(得分:1)

使用Java 8 stream api,您可以将所有路径映射到字符串并收集所有列表,如下所示。

try (Stream<Path> paths = Files.walk(Paths.get("D:\\myDir"))) {
    List<String> pathList = paths.map(p -> {
            if (Files.isDirectory(p)) {
                return "\\" + p.toString();
            }
            return p.toString();
        })
        .peek(System.out::println) // write all results in console for debug
        .collect(Collectors.toList());
} catch (IOException e) {
    e.printStackTrace();
}

答案 2 :(得分:0)

public static void main(String[] args) throws IOException {
    Path path = Paths.get(args[0]);
    List<Path> files = Files.walk(path).filter(s -> s.toString().endsWith(".txt")).map(Path::getFileName).sorted()
            .collect(Collectors.toList());

    for(Path file : files) {
        System.out.println("File: " + file);
    }
}