为什么ObjectOutputStream把符号写入文件而不是我的输入?

15 浏览
0 Comments

为什么ObjectOutputStream把符号写入文件而不是我的输入?

这个问题已经有了答案

如何创建文件并向其写入?

我试图将我的ArrayList,名为Clients,写入到一个文件中。它运行正常,但不幸的是,它只是将符号写入文件,而不是我的实际输入。

下面是我的代码:

    public void SaveToFile() {
    try 
    {
        FileOutputStream fos = new FileOutputStream("CustomerLists.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(Clients);
        oos.close();
    } catch (Exception ex) {
        ex.printStackTrace();
   }

我该如何使其起作用?

admin 更改状态以发布 2023年5月24日
0
0 Comments

为什么当我运行这个Java程序时,它会创建文本文件,但打印出来的是符号,而不是我的输入内容?

因为它不是一个文本文件。它是序列化数据,根据Java序列化协议编写,因为您使用的是ObjectOutputStream.writeObject()

这也意味着CustomerLists.txt不是该文件的适当名称。

如果您想要文本,使用PrintWriterBufferedWriter

0
0 Comments

你现在做的是使用ObjectOutputStream将Java对象序列化写入文件。这意味着Java将你的Clients对象转换为一种特定的表示方式,其中包含了对象的所有状态,比如成员变量。这种表示形式不是面向人类的可读性,而是一种更高效、更适合类和Java环境的二进制格式。在这里可以找到更多信息。

你可以使用FileWriterBufferedWriterPrintWriter代替ObjectOutputStream,这些类都有多个write[...](...)方法可用于写入文本到文件中。在这种情况下,你需要为每个变量分别写入其String等类型,而不是整个类。在这里可以找到相关示例。

ObjectOutputStream执行相同操作的另一种选择是使用Java Architecture for XML Binding (JAXB),它提供了一种完全可定制的、面向人类的形式。不过这需要一些阅读。也有其他支持JSON等格式的对象序列化库可用。

0