当前位置: 首页 > 面试题库 >

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

纪正德
2023-03-14
问题内容

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

更新

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

更新

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

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



 类似资料:
  • 问题内容: 我正在处理文件中的序列化和反序列化。而且,我正在堆叠使用with 。问题是我有服务器/客户端聊天应用程序,无论何时连接客户端,服务器都必须检查连接的客户端是否已注册。因此,当客户端连接到服务器时,服务器会创建一个输出流,例如 获取链接列表以检查此列表是否包含此对象。但是,总是创建一个没有内容的新文件。我知道是否将“ true”值作为附加文件的第二个参数传递,但是此.txt文件应仅包含一

  • 我上过Java的基础课,但我的知识很少。自从我越来越熟悉Java以来,我在过去一两个月里创建了一个基于文本的rpg。我想知道是否有任何方法可以让程序创建一个“保存”文件存储在某个文件夹中,并提示用户是否想要打开保存的字符。我还没有学习Java的任何面向对象的部分。我能做些什么来实现这一点?

  • 问题内容: 我正在Node.js中构建文本编辑器,用户可以在其中在textarea中创建文件。完成文件编辑后,他可以按下“导出”按钮,该按钮触发一个Jquery函数,该函数读取textarea并将文本发布到node.js服务器上。服务器应读取该信息并返回文件。我想避免在服务器上创建文件并提供服务,而是希望使用流动态创建文件。我已经尝试使用以下方法,但是没有用: 有人对如何实现这一目标有任何见识吗?

  • 我正在使用一个名为的基于ffmpeg的模块来编辑音频文件。我正在尝试使用模块,但由于某种原因,我无法关闭文件(它们没有被删除)。使用上下文管理器时,它抛出。 我所尝试的: 这段代码按照预期的方式工作,但是它没有删除tempfile,不会抛出任何错误。 这将创建第一个临时文件,然后抛出一个错误: 我不确定我在这里错过了什么

  • 想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 谁能帮我创建一个批处理文件,该文件应该删除名称前面有关键字的文件。 请帮助我创建一个批处理文件。 我是批处理脚本的新手,你也可以建议我学习任何有用的网站。 先谢谢你,蒂鲁

  • 问题内容: 声纳给出了一个错误,应该将其关闭。我需要修改以下代码才能使用。我该怎么做呢? 问题答案: 当前,代码尚不准备处理异常-您丢失了finally块来关闭打开的流。而且,当然,您是对的-使用try-with-resources解决了这个问题: