java - 为什么删除FileOutputStream的文件时没有异常?

标签 java stream fileoutputstream

我只是花了很多时间跟踪一个文件未写入的错误,并注意到我在创建 FileOutputStream 之后但在向其中写入任何内容之前删除了该文件。我可以理解这是错误的,但为什么它不抛出异常来删除文件然后尝试在其上写入?

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Test {

    public static void main(String[] args) throws FileNotFoundException, IOException
    {
        File test = new File("test.txt");
        try(OutputStream out = new FileOutputStream(test))
        {
            if(test.exists()) {test.delete();}
            out.write("Hello World".getBytes());
        }
    }
}

我的 Java 安装是否损坏? 我的java版本:

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

最佳答案

它实际上并没有删除文件。它正在删除文件的内容。当您运行代码并取出 out.write 语句时,您将看到该文件实际上并未被删除,它只是从文件中删除了文本。它无法完全删除该文件,因为您的 FileOutputStream 正在引用该文件。如果您取出 FileOutputStream 声明,那么它将完全删除该文件。或者,如果您在删除之前关闭 FileOutputStream,那么它将完全删除该文件。

示例:

        File test = new File("test.txt");
        try(OutputStream out = new FileOutputStream(test))
        {
            out.close();
            if(test.exists()) {System.out.println("test2");test.delete();}
            //out.write("Hello World2".getBytes());
        }

关于java - 为什么删除FileOutputStream的文件时没有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659238/

相关文章:

java - 将菜单添加到 Activity 而不是 fragment

java - 在 Vaadin 8 中传递和接收数据

java - ArrayList中如何区分String和Integer?

php - 直播播放

c# - 处置后调用 MemoryStream.ToArray() 是否危险?

java - 使用 zip4j 损坏 NiFi ExecuteScript 输出

java - Android FileOutputStream 不创建文件

java - 在 SwingUtilities.invokeLater 中放置(和不放置)什么?

java - java方法保存的文件中添加了不需要的反斜杠

java - 获取字符串中的bytedata数据