使用Java nio文件walk()读取文件

Tej*_*jal 6 java file list 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

dav*_*xxx 6

您split()是正确的,但同时map()收集目录和文件时,您的信息流中的您似乎不正确。
所以,你没有收集的预期值:即String用XXX_XXX模式。

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

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