使用FileOutputStream创建的文件如何删除?

13

我正在开发 Android 平台应用程序。
我的应用程序通过简单的调用创建一个临时文件:

FileOutputStream fos = openFileOutput("MY_TEMP.TXT", Mode);

它运行良好,因为我可以正常地写入和读取它。

问题在于当我退出应用程序时,我想删除此文件。我使用了:

File f = new File(System.getProperty("user.dir"), "MY_TEMP.TXT");
f.delete()

但它总是返回 false,文件也没有被删除。
我尝试过:

File f = new File("MY_TEMP.TXT");
f.delete();

它也不起作用。

5个回答

13

我查看了这篇帖子,从FileOutputStream创建的文件最好的删除方法是通过Context方法deleteFile(TEMP_FILE)进行简单调用,就是这么简单。


没错!这非常简单!只需调用deleteFile(TEMP_FILE);它直接进入分配给配置文件的文件夹,并且根据文档是可移植的。它适合我的需求。哇,我完全走错了方向!无论如何,感谢你们所有人指引我正确的方向。 - user396933
是的,使用FileOutputStream创建的文件最快的删除方法。 - anticafe

8

您无法删除已打开的文件。在删除之前,您需要关闭流。

fos.close();
f.delete();

话虽如此,我更愿意使用File#createTempFile()让底层平台执行自动清理工作,并避免使用File中的相对路径可能导致的可移植性问题。


1
createTempFile 的文档中可以得知:"该方法仅提供临时文件设施的一部分。要安排由此方法创建的文件自动删除,请使用 deleteOnExit() 方法。" - Powerlord
R. Bemrose:一个好的操作系统会定期清理临时目录。 - BalusC
1
@BalusC:很遗憾,Windows不是一个像样的操作系统。 ;) 至于Android如何处理它,我无法发表意见。 - Powerlord
同意 R. Bemrose 的 deleteOnExit() 方法。在过去中它非常有用。 - Justian Meyer
对于这种行为,有什么更好的方法吗?我认为简单的平面文件就足够了。 - user396933
显示剩余4条评论

1

在删除文件之前,您需要关闭它。使用以下代码。

        FileOutputStream fos = openFileOutput("MY_TEMP.TXT",Mode);
        File f = new File(System.getProperty("user.dir"),"MY_TEMP.TXT");
        fos.close();
        File f = new File("MY_TEMP.TXT");
        f.delete();

0

在尝试删除文件之前,请仔细检查流是否已关闭。


0
你已经有了一些不错的答案,但我想提一下File.deleteOnExit(),它可以在VM退出时安排文件删除。
--编辑--
你仍然应该关闭与文件连接的任何流。

我并不是说它一定会成功。只是另一种删除文件的方式 :) - willcodejavaforfood

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