尝试使用具有多个资源的资源

Try with resources with multiple resources

提问人:Selçuk Altınay 提问时间:9/11/2023 更新时间:9/11/2023 访问量:47

问:

我正在尝试将 try-with-resources 与以下代码一起使用

try {
    FileOutputStream fileIn = new FileOutputStream("veri.obj");
    ObjectOutputStream objectIn = new ObjectOutputStream(fileIn);

    objectIn.writeObject("123"); 
    fileIn.close();
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

喜欢这个

try(FileOutputStream fileIn = new FileOutputStream("veri.obj");
    ObjectOutputStream objectIn = new ObjectOutputStream(fileIn))
{

    objectIn.writeObject("123"); 
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

但是我在 writeObject() 期间进行了 IOException; 该文件存在,并且 r/w 权限没有问题。第一个代码正在运行,但第二个代码未运行。我错过了什么?

我尝试使用File类的方法检查文件是否存在和权限

Java 文件 IO Try-with-Resources

评论

2赞 g00se 9/11/2023
但是我在 writeObject() 期间进行了 IOException;
1赞 ControlAltDel 9/11/2023
序列化的 Java 对象很脆弱,应始终尽量避免使用 ObjectOutputStream 和 ObjectWriter。就您而言,这完全没有必要!使用纯 OutputStream。更好的是,使用 FileWriter,因为 FileWriter 具有设置序列化文本字符集(即 utf-8 等)的能力
0赞 g00se 9/11/2023
更好的是,使用 FileWriter当然不是。Java 序列化是一种二进制操作,不适合作为文本操作进行处理。如果使用文本序列化,情况可能会有所不同,但事实并非如此
2赞 Holger 9/11/2023
首先,您应该决定是要读取还是写入数据。你在标识符中混合了“in”和“out”应该已经对你大喊大叫了,说有问题。对于 ,文件是否存在并不重要。与读取对象相反,编写对象永远不会抛出,因此,此代码甚至不会通过编译器。而你的第一个变体,它关闭了,但不是坏了,会创建损坏的文件(一旦你修复了编译器错误)。FileOutputStreamClassNotFoundExceptionFileOutputStreamObjectOutputStream
0赞 DuncG 9/12/2023
什么是异常消息?顺便说一句,你不应该有objectIn.close();fileIn.close();

答: 暂无答案