8

我已经创建了一个属性文件,我想加密保留相同文件夹的加密属性文件并删除原始属性文件。当我第一次在我的 java 应用程序上执行此操作时,它会以正确的方式进行。但是当我再次这样做时,它不会删除创建的原始属性文件。当我尝试手动删除它时,它给了我一条重试消息,说“无法完成该操作,因为文件在 java(TM) 平台 SE 二进制文件中打开。关闭文件并重试。” 在我关闭我的应用程序后,它可以手动删除。我的代码如下。问题出在 propfile123.delete() 上。我该如何解决这个问题。

//Encrypt the property file
        Encrypt_Decrypt encrpt= new Encrypt_Decrypt("AES/ECB/PKCS5Padding","properties\\"+name_of_propertice_file+".properties", mstr_pass);
        try {
            encrpt.encrypt();
        } catch (Exception ex) {
            Logger.getLogger(Secure_File.class.getName()).log(Level.SEVERE, null, ex);
        }

        //delete the original properties file
        File propfile123= new File("properties\\"+name_of_propertice_file+".properties");
        System.out.println(propfile123.exists());   // always return true

        System.out.println(propfile123.delete());   //here returns false when I call at second time to this method.
4

2 回答 2

13

证据很清楚,删除失败的原因是您的应用程序仍然在某个地方打开了文件。

要解决此问题,您需要确定打开文件的位置,并确保在尝试删除文件之前将其关闭。(我怀疑问题与您的Encrypt_Decrypt课程以及您使用它的方式有关。但这只是一个猜测。)

于 2013-11-09T02:38:45.073 回答
7

打开文件时:

BufferedReader br = new BufferedReader (new FileReader (new File ("somefile"))); 

如果您不调用该方法close()BufferedReader则无法删除该文件。

在对其进行任何更改之前始终关闭文件,甚至删除或重命名它。希望对你有帮助,问候。

于 2014-03-19T19:22:28.797 回答