关闭使用FileOutputStream创建的文件,以进行下一次删除

use*_*114 6 java fileoutputstream delete-file

我目前在Java代码中遇到了FileOutputStream的问题.

实际上我使用FileOutputStream来创建文件,但是一旦创建了文件,就无法删除它.据我所知,这可能来自FileOutputstream未关闭的事实.

在我的汇总代码下面:

     outFile = new FileOutputStream(dir+"\\"+fileName);
     outFile.write("Test");
     outFile.flush();
     outFile.close();
     outFile = null;
     System.gc();
Run Code Online (Sandbox Code Playgroud)

然后就没有办法删除文件,即使是"手动".当我的程序启动时,我无法通过简单的del在Windows上删除它.我还试图删除文件夹目录的内容,但它也没有用,使用此代码:

static public void delDir( String place )

{
    File path = new File( place );
    System.out.println(path.exists());//return true
    if( path.exists() )
        {
        File[] f = path.listFiles();
        for( int j = 0 ; j < f.length ; j++ )
            {
            if( f[ j ].isDirectory() )
                {
                deleteDirectory( path+"\\"+f[ j ] );
                }
            f[ j ].delete();
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是: 如何关闭此文件以进行下一次删除(或者如果我们无法关闭它,如何正确删除它)?

chr*_*gel 13

这是Java中的一个错误.是的它很少,但它们存在;)你可以添加outFile.close()

outFile = null;
System.gc();
Run Code Online (Sandbox Code Playgroud)

然后尝试删除它.如果这不起作用,还有更多可能性.让我知道.

UPDATE

对我来说它有效:

public class FileDeleteExample {
    public static void main(String[] args) throws Exception {
        File f = new File("test.txt");

        FileOutputStream outFile = null;

        try {
            outFile = new FileOutputStream(f);
            outFile.write("Test".getBytes());
        } finally {
            outFile.flush();
            outFile.close();
            outFile = null;
            System.gc();
        }

        f.delete();
    }
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我通过删除线条的例子Sumit Singh尝试了它,outFile=null; System.gc;这对我来说也很有用.所以不应该有问题FileOutputStream.你能试试上面的小例子并说明它是否有效吗?

UPDATE

void closeQuietly(FileOutputStream out) {
    try { out.flush(); out.close(); } catch(Exception e) {} 
}
Run Code Online (Sandbox Code Playgroud)

现在只需调用finally块中的方法!