【问题标题】:Java Programming: Storing Objects and Arrays into a fileJava 编程:将对象和数组存储到文件中
【发布时间】:2011-12-03 19:40:50
【问题描述】:

*我的任务是编写一个程序,该程序存储一个包含五个 int 值 1、2、3、4 和 5 的数组,一个用于当前时间的 Date 对象和一个 double 值 5.5。到名为 Exercies19_2.txt 的文件中。接下来,我要在程序中编写一个方法,打开Exercise19_2.txt,读取数据并显示到命令窗口。当我运行我的程序时,我不断得到这个:

java.io.ObjectInputStream.readObject0 处的线程“main”java.io.OptionalDataException 中的异常(未知来源) 在 java.io.ObjectInputStream.readObject(未知来源) 在 WriteArray.main(WriteArray.java:29)。

你能帮我弄清楚我做错了什么吗??????这是我写的:

    import java.io.*;

    public class WriteArray {

    public static void main(String[] args)throws ClassNotFoundException,IOException {
    int[] numbers = {1, 2, 3, 4, 5};

    //Create an output stream for file
    ObjectOutputStream output = new ObjectOutputStream
    (new FileOutputStream("Exercises19_2.txt", true));

    //Write to file
      output.writeDouble(5.5);
      output.writeObject(numbers);
      output.writeObject(new java.util.Date());
      output.writeUTF("Exercises19_2.txt");

    //Close the stream
      output.close();

     //Create an input stream for file
     ObjectInputStream input = new ObjectInputStream
           (new FileInputStream("Exercises19_2.txt"));

     int[]newNumbers = (int[])(input.readObject());
       for (int i = 0; i < newNumbers.length; i++)
         System.out.println("Integers: " + newNumbers[i] + " ");

    String FileName= input.readUTF();
    double Double = input.readDouble();
    java.util.Date date = (java.util.Date)(input.readObject());
      System.out.println("DateTime: " + date);


    //Display the output

    System.out.println("Double: " + " " + input.readDouble());
    System.out.println("FileName: " + " " + input.readUTF());

    //Close the stream
     input.close();


      }
    }

【问题讨论】:

    标签: java arrays serialization


    【解决方案1】:

    在对 objectOutputStream 进行序列化和反序列化时,您必须按照写入对象的顺序读取对象。您写入文件的第一件事是带有output.writeDouble(5.5); 的双精度数,因此您需要先读回双精度数,然后才能读取数字数组。

    【讨论】:

      【解决方案2】:

      尝试按照您写入文件的顺序(双精度、对象、日期)进行回读。

      【讨论】:

        【解决方案3】:

        每个output.writeXXX() 调用都会将一些内容写入输出文件。读回数据时,读取的顺序必须与写入的顺序完全对应。其他的都行不通。

        附:文件名Exercies19_2.txt.txt 结尾的事实暗示它应该是一个文本文件(即人类可读的)。 ObjectOutputStream 不生成文本文件;它产生一个二进制。您可能需要咨询您的讲师,了解他们的期望。

        【讨论】:

          【解决方案4】:

          下次你应该仔细阅读答案。

          aixChrisMike Adler 给了你确切的提示:按照你写入文件的顺序读回。

          之后,解决方法就很简单了:

          import java.io.*;
          import java.util.Arrays;
          import java.util.Date;
          
          public class WriteArray {
          
              public static void main(String[] args) 
                  throws ClassNotFoundException, IOException {
                  int[] numbers = {1, 2, 3, 4, 5};
          
                  //Create an output stream for file
                  ObjectOutputStream output 
                      = new ObjectOutputStream(
                            new FileOutputStream("Exercises19_2.bin", true));
          
                  //Write to file
                  // 1. Write double
                  output.writeDouble(5.5);
                  // 2. Write int array object
                  output.writeObject(numbers);
                  // 3. Write date object
                  output.writeObject(new java.util.Date());
                  // 4. Write utf string
                  output.writeUTF("Exercises19_2.bin");
          
                  // Close the stream
                  output.close();
          
                  //Create an input stream for file
                  ObjectInputStream input 
                      = new ObjectInputStream(
                            new FileInputStream("Exercises19_2.bin"));
          
                  // Read from file
                  // 1. Read double
                  double doubleValue = input.readDouble();
                  System.out.println("Double value: " + doubleValue);
                  // 2. Read int array object
                  int[] newNumbers = (int[]) (input.readObject());
                  System.out.println("Integers: " + Arrays.toString(newNumbers));
                  // 3. Read date object
                  Date date = (java.util.Date) (input.readObject());
                  System.out.println("DateTime: " + date);
                  // 4. Read utf string
                  String fileName = input.readUTF();
                  System.out.println("File name: " + fileName);
          
                  // Close the stream
                  input.close();
              }
          }
          

          【讨论】:

          • 感谢您的帮助!抱歉,我没有很好地阅读答案。我对这个网站和 Java 有点陌生。我显然没有看到所有的帮助。谢谢大家。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          • 2014-08-08
          • 2013-07-06
          • 2021-05-06
          • 1970-01-01
          • 2015-05-27
          相关资源
          最近更新 更多