Java 关闭使用FileOutputStream创建的文件,以便下次删除封闭目录
这个问题已经提出了。但是,那里提出的解决方案并不令人满意/不符合承诺 问题(在删除目录中的一个文件后删除封闭目录有时不起作用)仍然存在于java 8中,无论文件流是否被刷新、关闭、设置为null、调用System.gc()或Thread.yield()等。只需在短暂睡眠后重试即可成功 下面是一个小测试程序,可以解决此问题:Java 关闭使用FileOutputStream创建的文件,以便下次删除封闭目录,java,delete-file,fileoutputstream,Java,Delete File,Fileoutputstream,这个问题已经提出了。但是,那里提出的解决方案并不令人满意/不符合承诺 问题(在删除目录中的一个文件后删除封闭目录有时不起作用)仍然存在于java 8中,无论文件流是否被刷新、关闭、设置为null、调用System.gc()或Thread.yield()等。只需在短暂睡眠后重试即可成功 下面是一个小测试程序,可以解决此问题: public static void main(String args[]) { int run = 0; try { File d
public static void main(String args[])
{
int run = 0;
try
{
File dir = new File("c:\\testdir");
for (run = 0; run < 10000; run++)
{
dir.mkdirs();
File file = new File(dir, "testfile.txt");
FileOutputStream str = new FileOutputStream(file);
ObjectOutputStream ostr = new ObjectOutputStream(str);
{
ostr.writeObject(Boolean.FALSE);
}
ostr.flush();
ostr.close();
ostr = null;
str.flush();
str.close();
str = null;
Thread.yield();
System.gc();
int retries = 10;
int dretries = 10;
while (! file.delete())
{
if (--retries > 0)
{
Thread.sleep( 10);
}
else
{
throw new Exception( "file.delete");
}
}
while (! dir.delete())
{
if (--dretries > 0)
{
Thread.sleep( 10);
}
else
{
throw new Exception( "dir.delete");
}
}
if (retries != 10 || dretries != 10)
{
System.out.println( "loop:" + run + " - retries:" + retries + " - dretries:" + dretries);
}
if (run % 200 == 0) System.out.println( "loop:" + run);
}
}
catch (Throwable t)
{
t.printStackTrace();
}
System.out.println("run:" + run);
}
publicstaticvoidmain(字符串参数[])
{
int run=0;
尝试
{
文件目录=新文件(“c:\\testdir”);
对于(运行=0;运行<10000;运行++)
{
dir.mkdirs();
File File=新文件(dir,“testfile.txt”);
FileOutputStream str=新的FileOutputStream(文件);
ObjectOutputStream OSR=新的ObjectOutputStream(str);
{
ost.writeObject(Boolean.FALSE);
}
ost.flush();
ost.close();
ostr=null;
str.flush();
str.close();
str=null;
螺纹屈服强度();
gc();
int重试次数=10次;
int=10;
而(!file.delete())
{
如果(--重试次数>0)
{
睡眠(10);
}
其他的
{
抛出新异常(“file.delete”);
}
}
而(!dir.delete())
{
如果(--dretries>0)
{
睡眠(10);
}
其他的
{
抛出新异常(“dir.delete”);
}
}
如果(重试次数!=10次)
{
System.out.println(“循环:+run+”-retries:+retries+”-dretries:+dretries”);
}
if(运行%200==0)System.out.println(“循环:+run”);
}
}
捕获(可丢弃的t)
{
t、 printStackTrace();
}
System.out.println(“run:+run”);
}
怎样才能摆脱这个烦人的问题呢