java - 使用 Java 8 Parallel Stream 在并行读取多个文件时排除一些文件

标签 java multithreading java-8 parallel-processing java-stream

我正在从文件夹中读取多个文件(1000 个大小约为 5 MB 的文件)。下面的代码可以很好地读取、加载和存储文件的内容。

public void readAllFiles(String path) {

    try (Stream<Path> paths = Files.walk(Paths.get(path)).collect(toList()).parallelStream()) {
        paths.forEach(filePath -> {

            if (filePath.toFile().exists()) {
                String fileName = filePath.getFileName().toString();
                try {
                        List<String> loadedFile = readContent(filePath);
                        storeFiles(fileName, filePath, loadedFile);
                } catch (Exception e) {
                    LOGGER.info("ERROR WHILE READING THE CONTENT OF FILE");
                    LOGGER.error(e.getMessage());
                }
            }
        });
    } catch (IOException e) {
        LOGGER.info("ERROR WHILE READING THE FILES IN PARALLEL");
        LOGGER.error(e.getMessage());
    }
}

我的问题是在读取文件时我想排除一些文件,例如如果条件满足(文件名包含“ABC”&& 标志为真)则排除读取的文件

提前感谢您的任何建议。

最佳答案

Files.walk()返回 Stream<Path>所以你不需要将它转换为列表。 使用以下代码并行使用并对其进行过滤 在条件下。

try (Stream<Path> paths = Files.walk(Paths.get(path)).parallel()
    .filter(filePath->filePath.getFileName().toString().contains("ABC"))) {
        paths.forEach(filePath -> {
            //other staff...
        });
    } catch (IOException e) {

}

关于java - 使用 Java 8 Parallel Stream 在并行读取多个文件时排除一些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372124/

相关文章:

c++ - 嵌入式 Python 段错误

java - 如何在 streamex 中对映射流的 double 值求和?

sbt - ProGuard 使用 sbt-proguard 表示 Unsupported class version number [52.0](最大 51.0,Java 1.7)

java-8 - 如何在 Java 8 中使用流查找整数的最大值?

java - 在 libgdx 中渲染 box2d

java - 如何在SQLite/Java/Android中正确处理此类错误?

java - 从多个 Java 线程调用不可重入的 native 共享库

java - 带有数组的 Java.Util.Scanner 的 NoSuchElementException

c++ - 将 std::thread 对象存储为类成员

multithreading - 是否调用方法和函数