Java 如何在应用程序关闭时删除文件

Java 如何在应用程序关闭时删除文件,java,android,file,ondestroy,Java,Android,File,Ondestroy,我想在我的应用关闭时删除一个文件。我在活动的ondestory方法中执行删除。但当我检查文件是否被删除时,在关闭应用程序后,文件仍然存在 到目前为止,我的代码是这样的: @Override protected void onDestroy() { File file = new File(Environment.getExternalStorageDirectory().getPath(), "fileName.txt"); if(file.exists()){

我想在我的应用关闭时删除一个文件。我在活动的
ondestory
方法中执行删除。但当我检查文件是否被删除时,在关闭应用程序后,文件仍然存在

到目前为止,我的代码是这样的:

@Override
protected void onDestroy() {

    File file = new File(Environment.getExternalStorageDirectory().getPath(), "fileName.txt");
    if(file.exists()){
        file.delete();
    }

    super.onDestroy();
}
编辑:要求显示有关创建临时文件的代码片段:

try {
        file = File.createTempFile(Environment.getExternalStorageDirectory().getPath(), fileName);
    } catch (IOException e) {
        e.printStackTrace();
    }

您不应该依赖于要调用的
onDestroy
方法(系统可以在生命周期到达此阶段之前中断您的进程)。 我建议您使用临时文件夹来保存这样的文件,但您仍有责任将临时文件的大小保持在合理的限制范围内(~1MB)


更新(与临时文件片段相关)

您试图提供指向
ExternalStorageDirectory
的完整路径作为文件名前缀。 但这种方法有点不同。
File.createTempFile
函数除了使用随机名称在特殊的临时文件目录中创建文件外,什么都不做。因此,我们仍有责任提供一个临时文件夹,让系统知道此文件适合删除:

public File getTempFile(Context context, String url) {
    File file;
    try {
        String fileName = Uri.parse(url).getLastPathSegment();
        file = File.createTempFile(fileName, null, context.getCacheDir());
    catch (IOException e) {
        // Error while creating file
    }
    return file;
}

cachedDir
是内部存储,这意味着其他应用程序无法在此处写入文件,因此您应该实现以提供临时文件的URI。

您可以尝试使用。您可以覆盖
onTerminate()
以删除文件

我发现您创建文件的方式存在一些潜在问题,尤其是因为您想删除它们。您还可以通过这种方式将文件存储在应用程序的本地缓存中

// get the cache directory for our present `Activity`; 
// referred to by `context`
File directory = context.getCacheDir(); 

File file = File.createTempFile("prefix", "extension", directory);
[]这些文件对您的应用程序是私有的,如果设备存储空间不足,Android可以将其删除。虽然你不应该依赖这个

你可能想看看这张照片。因此,如果您跟踪在会话中创建的文件。在您的
ondestory()
中删除这些文件。我建议将此列表保存为
SharedRef
或其他形式。原因?这不是这个星球上最可靠的东西。如果保存了这些文件,您可以在下次调用
ondestory()
时删除它们(如果它们仍然存在)


就个人而言,我可能不会为此使用
onDestroy()
。也许
onStop()
更可靠。这是你的设计,你将是最好的裁判。:)

在Java中,您可以创建一个临时文件:。我不知道这在Android中是否有效。@Kenney,我将我的
delete()
方法替换为
deleteOnExit()
,但它不起作用。@Kenney你检查过你的
onDestroy
方法是否被调用了吗?我打赌你可以找到所有需要重写的方法。(@AleksandrMedvedev Thank;-))临时文件似乎很有希望,但是,我认为我不能使用临时文件,因为我将这些文件用作照相机
服务拍摄的照片,为什么你认为你不能?当照相机服务将图像字节数组写入该文件时,我收到一个空异常错误,该文件确实是作为临时文件创建的。您可以在创建文件的位置提供代码段吗?从:
此方法用于模拟流程环境。它永远不会在Android生产设备上调用,在Android生产设备中,进程只需杀死它们就可以被删除;执行此操作时不会执行任何用户代码(包括此回调)。