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

标签 java delete-file fileoutputstream

目前我的 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();
            }
        }
}

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

最佳答案

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

更新

我通过删除 outFile=null; 行提到的示例 Sumit Singh 进行了尝试。 System.gc; 这对我也适用。所以 FileOutputStream 应该没有问题。您能否尝试上面的小示例并说明它是否有效?

更新

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

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

关于java - 关闭使用 FileOutputStream 创建的文件,以便进行下一次删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096002/

相关文章:

java - 网络 javaSE 应用程序

java - 如何从 Java 删除 OSX 上的文件?

java - 如何比较两个文本文件的内容并输出到另一个文本文件中?文本1 - 文本2

amazon-web-services - 防止某些 AWS AMI 被意外删除

java - 文件写入未在 Android 中执行

java - 为什么 FileOutputStream 写入磁盘上的不同位置?

java - 可以修改示例以返回值吗?

java - StringBuilder.toString() 太大时在 Eclipse 控制台中打印为空字符串?

java - 面对tomcat的部署问题

ubuntu-14.04 - 删除 ubuntu 14.04 中指向其他位置的文件夹?