使用线程Java爬取文件系统的高效方法

问题描述 投票:0回答:1

我目前正在开发一个java项目,该项目从文件系统中对PDF进行OCR以搜索其内容。

在这个项目中,我正在用户指定的文件夹中搜索。我正在通过 OCR 获取 PDF 内容并检查其中是否包含用户提供的关键字。

我试图确保当对 PDF 进行 OCR 时,爬行或遍历继续进行(必须在另一个线程或几个线程上),以便系统的性能不会显着降低。

有办法做到这一点吗?我已经在下面包含了我正在使用的遍历代码..

public void traverseDirectory(File[] files) {
    if (files != null) {
        for (File file : files) {
            if (file.isDirectory()) {
                traverseDirectory(file.listFiles());
            } else {
                String[] type = file.getName().toString().split("\\.(?=[^\\.]+$)");
                if (type.length > 1) {
                    if (type[1].equals("pdf")) {
                        //checking content goes here
                    }
                }
            }
        }
    }
}
java search depth-first-search
1个回答
1
投票

您可以使用

Files.walkFileTree
:

ExecutorService executor = Executors.newFixedThreadPool(threadCount);
PdfOcrService service = ...
Path rootPath = Paths.get("/path/to/your/directory");
Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
    public void visitFile(Path path, BasicFileAttributes attrs) {
        executor.submit(() -> {
            service.performOcrOnFile(path);
        });
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.