我对编程很新,而且我一直在尝试将PDFBox用于个人项目。我基本上都在尝试验证PDF中是否包含特定的关键字,如果是,我想将文件转移到"已批准的"文件夹中。
我知道下面的代码编写得很差,但我无法正确传输或删除文件:
try (Stream<Path> filePathStream = Files.walk(Paths.get("C://pdfbox_teste"))) {
filePathStream.forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
String arquivo = filePath.toString();
File file = new File(arquivo);
try {
// Loading an existing document
PDDocument document = PDDocument.load(file);
// Instantiate PDFTextStripper class
PDFTextStripper pdfStripper = new PDFTextStripper();
String text = pdfStripper.getText(document);
String[] words = text.split("\\.|,|\\s");
for (String word : words) {
// System.out.println(word);
if (word.equals("Revisão") || word.equals("Desenvolvimento")) {
// System.out.println(word);
if(file.renameTo(new File("C://pdfbox_teste//Aprovados//" + file.getName()))){
document.close();
System.out.println("Arquivo transferido corretamente");
file.delete();
};
}
}
System.out.println("Fim do documento: " + arquivo);
System.out.println("----------------------------");
document.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
我想将文件传输到新文件夹中。相反,有时它们只会被删除,有时甚至没有任何反应。我想这个错误可能在foreach上,但我似乎无法找到解决问题的方法。
答案 0 :(得分:1)
您尝试在文件仍处于打开状态时重命名该文件,之后才关闭该文件:
// your code, does not work
if(file.renameTo(new File("C://pdfbox_teste//Aprovados//" + file.getName()))){
document.close();
System.out.println("Arquivo transferido corretamente");
file.delete();
};
首先尝试关闭文档,因此您的进程不再访问该文件,然后应该可以重命名该文件:
// fixed code:
document.close();
if(file.renameTo(new File("C://pdfbox_teste//Aprovados//" + file.getName()))){
System.out.println("Arquivo transferido corretamente");
};
正如Mahesh K指出的那样,重命名后你不必删除(原始)文件。重命名不会在原始文件需要删除的地方重复,只是重命名它。
答案 1 :(得分:0)
调用renameTo之后,你不应该使用delete ..根据我的理解,renameTo就像move命令一样。请参阅this