PDF框 - 无法重命名或删除文件

时间:2017-12-03 19:00:45

标签: java file pdf pdfbox

我对编程很新,而且我一直在尝试将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上,但我似乎无法找到解决问题的方法。

2 个答案:

答案 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