[英]delete temporary file in java
我在java中创建临时文件,但我无法删除它。 这是我写的代码:
temp = File.createTempFile("temp", ".txt");
temp.deleteOnExit();
fileoutput = new FileWriter(temp);
buffout = new BufferedWriter(fileoutput);
添加以下代码(在完成对文件的操作后):
buffout.close();
fileoutput.close();
temp.delete();
只要文件上的某些流是打开的,它就会被锁定(至少在JVM的Windows实现上)。 所以它无法删除。
最好在使用后检查所有打开的流是否再次关闭,因为这是一个糟糕的内存泄漏情况。 您的应用程序甚至可能会占用所有可用的文件句柄,从而导致系统无法使用。
有一个错误说如果文件由文件编写者或任何东西打开,它将不会被删除。 在窗户上。 检查您是否关闭文件编写者。
另一种解决方法是安装ShutdownHook ,手动删除文件。
您必须干净地关闭VM才能使deleteOnExit
正常工作(我怀疑)。 在UNIX
, kill
将是一个干净的关闭(即ShutdownHooks
将被处理),而kill -9
更像是一个强制退出 。
deleteOnExit
绝对适合我!
用于关闭inpustream和outputstream的代码:
FileInputStream in = new FileInputStream();
ArrayList list_in = new ArrayList<FileInputStream>();
list_in.add(in);
FileOutputStream out = new FileOutputStream();
ArrayList list_out = new ArrayList<OutputputStream>();
list_in.add(out);
public do_before_exit()
{
for(int i=0;i<list_in.size();i++)
{
FileInputStream in=(FileInputStream)list_in.get(i)
FileInputStream out=(FileInputStream)list_out.get(i)
in.close()
out.close();
}
}
import java.io.File;
import java.io.IOException;
public class TemporaryFileExample
{
public static void main(String[] args)
{
File temp;
try
{
temp = File.createTempFile("myTempFile", ".txt");
System.out.println("Temp file created : " + temp.getAbsolutePath());
//temp.delete(); //For deleting immediately
temp.deleteOnExit(); //Delete on runtime exit
System.out.println("Temp file exists : " + temp.exists());
} catch (IOException e)
{
e.printStackTrace();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.