猿问

多文件读取循环并区分 .pdf 和 .doc 文件

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

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

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

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

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

任何帮助,将不胜感激!


摇曳的蔷薇
浏览 107回答 3
3回答

一只甜甜圈

您可以使用 aFileFilter仅读取一种或另一种类型,然后做出相应的响应。它会给你一个List仅包含所需类型的文件。第二个要求让我感到困惑。我认为通过创建一个类来封装您想要解析的数据和行为,您会得到很好的帮助Resume。编写一个工厂类,它接受InputStream并生成Resume包含您需要的数据的工厂类。您犯了一个典型的错误:您将所有逻辑嵌入到主方法中。这将使测试您的代码变得更加困难。所有的问题解决都是把大问题分解成小问题,解决小问题,然后组合起来最终解决大问题。我建议您将这个问题分解为更小的类。例如,在您可以读取和解析单个 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。

慕哥9229398

使用 a 的另一种替代方法FileFilter是使用 a DirectoryStream,因为Files::newDirectoryStream可以轻松指定相关的文件结尾:try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{doc,pdf}")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (Path entry: stream) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// process files here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp;} catch (DirectoryIteratorException ex) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// I/O error encounted during the iteration, the cause is an IOException&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw ex.getCause();&nbsp; &nbsp; &nbsp; &nbsp;}}

慕容708150

你可以做一些基本的事情,比如:// Put the path to the folder containing all the resumes hereFile f = new File("C:\\");ArrayList<String> names = new ArrayList<> (Arrays.asList(Objects.requireNonNull(f.list())));for (String fileName : names) {   if (fileName.length() > 3) {       String type = fileName.substring(fileName.length() - 3);       if (type.equalsIgnoreCase("doc")) {           // doc file logic here       } else if (type.equalsIgnoreCase("pdf")) {           // pdf file logic here       }    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答