首页 > 解决方案 > 多文件读取循环和区分 .pdf 和 .doc 文件

问题描述

我在 Eclipse 中编写一个 Java 程序来扫描简历中的关键字并过滤其中最合适的简历,除了显示每个简历的关键字。简历可以是 doc/pdf 格式。

我已经成功实现了一个程序来分别读取 pdf 文件和 doc 文件(通过使用 Apache 的 PDFBox 和 POI jar 包并为所需方法导入库),显示关键字并根据找到的关键字数量显示简历强度。

现在有两个问题陷入困境:

(1) 我需要区分程序中的pdf文件和doc文件,这很容易通过 if 语句实现,但我很困惑如何编写代码来检测文件是否具有 .pdf 或 .doc 扩展名。(我打算建立一个应用程序来选择简历,但是程序必须决定它是实现doc类型文件读取块还是pdf类型文件读取块)

(2) 我打算为简历列表运行程序,为此我需要一个循环,在其中我将为每个简历运行关键字扫描操作,但我想不出办法,因为即使这些文件被命名为“resume1”、“resume2”等,我们不能在文件位置分配循环的可迭代变量,例如:'C:/Resumes_Folder/Resume[i]'因为这就是路径。

任何帮助,将不胜感激!

标签: javaeclipsefilepdfdoc

解决方案


  1. 您可以使用 aFileFilter仅读取一种或另一种类型,然后做出相应的响应。它会给你一个List只包含所需类型的文件。
  2. 第二个要求让我感到困惑。我认为通过创建一个封装你想要解析的数据和行为的类,你会得到很好的服务Resume。编写一个工厂类,该类接受InputStream并生成Resume包含您需要的数据的 a。

你犯了一个典型的错误:你把所有的逻辑都嵌入到一个 main 方法中。这将使您的代码更难测试。

所有的问题解决都包括将大问题分解成小问题,解决小问题,然后将它们组合起来最终解决大问题。

我建议你把这个问题分解成更小的类。例如,在您可以读取和解析单个 PDF 和 DOC 文件之前,不必担心遍历目录中的文件。

创建接口:

public interface ResumeParser {
    Resume parse(InputStream is) throws IOException;
}

为 PDF 和 Word Doc 实现不同的实现。

ResumeParser创建一个工厂以根据文件类型为您提供适当的:

public class ResumeParserFactory {
    public ResumeParser create(String fileType) {
        if (fileType.contains(".pdf") {
           return new PdfResumeParser();            
        } else if (fileType.contains(".doc") {
           return new WordResumeParser();
        } else {
           throw new IllegalArgumentException("Unknown document type: " + fileType);
        }
    }
}

一定要随时编写单元测试。您应该知道如何使用JUnit


推荐阅读