我创建了一个属性文件,我想加密保留相同的文件夹加密属性文件并删除原始属性文件。当我第一次在我的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.
答案 0 :(得分:13)
证据很明显,删除失败的原因是您的应用仍然在某个地方打开文件。
要解决此问题,您需要弄清楚在哪里打开文件,并确保在尝试删除它之前关闭它。 (我怀疑这个问题与你的Encrypt_Decrypt
课以及你使用它的方式有关。但这只是猜测。)
答案 1 :(得分:7)
打开文件时:
BufferedReader br = new BufferedReader (new FileReader (new File ("somefile")));
如果您未调用close()
的方法BufferedReader
,则无法删除该文件。
在对文件进行任何更改之前,请务必关闭该文件,甚至将其删除或重命名。 我希望能帮助你,问候。