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

问题描述

这是Java中的错误。是的,它很少出现,但是它们存在;)您可以在之后加上outFile.close()

outFile = null;
System.gc();

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

对我来说,它有效:

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();
    }
}

我以删除行的示例Sumit Singh进行了尝试outFile=null; System.gc;,这对我也很有效。因此不应有问题FileOutputStream。您能否尝试上面的小示例并说出它是否有效?

void closeQuietly(FileOutputStream out) {
    try { out.flush(); out.close(); } catch(Exception e) {} 
}

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

解决方法

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

实际上,我正在使用FileOutputStream创建文件,但是一旦创建了文件,就无法删除它。据我了解,这可能来自FileOutputstream没有关闭的事实。

在下面的摘要代码中:

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

这样就无法删除文件,即使是“手动”也是如此。启动程序时,无法通过简单的del在Windows上将其删除。我还尝试使用以下代码删除文件夹 dir的
内容,但该方法均无效:

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();
            }
        }
}

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”