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生产设备中,进程只需杀死它们就可以被删除;执行此操作时不会执行任何用户代码(包括此回调)。