Java的file.delete()无法工作

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.

1
未提供足够的信息。此代码未展示所描述的问题。 - user207421
2个回答

13

明确的证据表明删除操作失败的原因是因为您的应用程序仍然在某个地方打开着这个文件……。

为了解决这个问题,您需要找出 在哪里 打开了这个文件,并确保在试图删除它之前将其关闭......(我猜测问题可能与您的Encrypt_Decrypt类以及您使用它的方式有关。但那只是一个猜测。)


但第一次我这样做它可以工作。第二次它无法删除。 - Gayan Fernando
没有提供最小自包含可执行代码(SSCCE),我觉得我们无法对此提供进一步的帮助。 - Stephen C

7

当您打开一个文件时:

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

如果您没有调用BufferedReaderclose()方法,则无法删除文件。
在进行任何更改之前,始终关闭文件,即使是删除或重命名文件。希望能对您有所帮助,祝好!

遇到了这个坏家伙(有点晚),但正在处理一个旧的应用程序。使用br.close()不够,即使通过try(BufferedReader br..)也不行,尽管在这种情况下BR关闭FR,我仍然需要在try with resource中创建FileReader和BufferedReader。一旦发生这种情况,删除就可以正常工作了。 - kendavidson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接