为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

摇曳的蔷薇 2023-07-28 09:46:42
我正在 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]'这就是路径。任何帮助,将不胜感激!
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

  1. 您可以使用 aFileFilter仅读取一种或另一种类型,然后做出相应的响应。它会给你一个List仅包含所需类型的文件。

  2. 第二个要求让我感到困惑。我认为通过创建一个类来封装您想要解析的数据和行为,您会得到很好的帮助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。



查看完整回答
反对 回复 2023-07-28
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

使用 a 的另一种替代方法FileFilter是使用 a DirectoryStream,因为Files::newDirectoryStream可以轻松指定相关的文件结尾:


try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{doc,pdf}")) {

           for (Path entry: stream) {

               // process files here

           }

       } catch (DirectoryIteratorException ex) {

           // I/O error encounted during the iteration, the cause is an IOException

           throw ex.getCause();

       }

}


查看完整回答
反对 回复 2023-07-28
?
慕容708150

TA贡献1831条经验 获得超4个赞

你可以做一些基本的事情,比如:


// Put the path to the folder containing all the resumes here

File 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

       }

    }

}


查看完整回答
反对 回复 2023-07-28
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信