java - 使用 Java nio files walk() 读取文件

标签 java list file java-8 java-stream

我正在使用流 API 读取文件 我正在调用 readFile() 方法,同时在第一个循环中迭代循环 我正在获取路径值 如何删除该路径值,因为我正面临数组索引越界异常。 文件命名转换为“FileName_17072018”。

public class RemoveCVVFilesjob {

    public static void main(String[] args) throws IOException {
        List<String> fileList;
        fileList = readFile();

        for (String str : fileList) {
            String[] strArr = str.split("_");
            System.out.println(strArr[1]);
        }
    }

    private static List<String> readFile() throws IOException {

        try (Stream<Path> paths = Files.walk(Paths.get("D:\\Projects\\Wallet\\CVVFiles"))) {

            List<String> list = paths.map(path -> Files.isDirectory(path) ? 
                path.getFileName().toString() + '/' : 
                path.getFileName().toString()).collect(Collectors.toList()
            );
            return list;
        }
    }

最佳答案

您的 split() 是正确的,但您在流中的 map() 似乎不正确,因为您收集了目录和文件。
所以您没有收集预期值:即 StringXXX_XXX 模式。

请注意,map() 不是为过滤而设计的,而是为转换而设计的。
使用 filter() 而不是并使用它来仅过滤文件:

List<String> list = paths.filter(Files::isRegularFile)
                         .map(p -> p.getFileName()
                                    .toString())
                         .collect(Collectors.toList());

关于java - 使用 Java nio files walk() 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51378999/

相关文章:

java - 应用程序翻译字符串资源消耗和模式编译

java - 包含 native DLL 的 ANT Java-Jar 任务

Excel VBA - 将列表中的值 append 到每日变化的数据上

C# 是否清除具有值类型的 List<T> 仍然是 O(n) 操作?

c - 错误(段错误核心转储)-列表和结构指针

c - 如何获取C中目录中所有文件的总字节数

java - 有没有办法让方法检查数据库中是否存在唯一数据?

java - 如何在 JAVA 中将两个 int(s) 合并为一个 double?

c++ - 从结构写入文件时的额外字符

java - 使用共享资源拆分文件并处理每个部分