【发布时间】:2020-03-13 10:01:59
【问题描述】:
我正在学校学习 java 课程,并被问到这个问题: “编写一个程序,将五个 int 值 1、2、3、4 和 5 的数组、当前时间的 Date 对象和 double 值 5.5 存储在名为 Exercise17_05.dat 的文件中。”
我的教授想通过说“我们将对此进行一些更改,因为您需要让用户输入他们的姓名并输入五 (5) 个整数值以及提到的其他两项。”
感谢这里出色的人们,我想出了如何解决最初的问题。我试图用我所知道的修改程序,但不断收到“线程中的异常”错误。
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readLong(DataInputStream.java:416)
at java.io.DataInputStream.readDouble(DataInputStream.java:468)
at java.io.ObjectInputStream$BlockDataInputStream.readDouble(ObjectInputStream.java:3208)
at java.io.ObjectInputStream.readDouble(ObjectInputStream.java:1061)
at cosc_hw17.COSC_HW17.main(COSC_HW17.java:75)
Java Result: 1
我知道这与创建数组和从文件部分读取的原始数据有关。任何帮助将不胜感激。
我所拥有的附在下面。我更新了代码,但仍然有问题。错误是读取它找不到数字“readObject”的符号
import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
import java.util.Date;
public class COSC_HW17
{
// main method
public static void main(String[] args)
throws ClassNotFoundException, IOException
{
// create scanner
Scanner input = new Scanner (System.in);
// stores integers in array
double [] numbers = new double [5];
// stores the returned array from method
double[] ret;
//Create an output stream for file
ObjectOutputStream output
= new ObjectOutputStream(
new FileOutputStream("Exercise17_05.dat", true));
// Ask user for name
System.out.println("Please Enter Name:");
String name = input.next();
// Ask user for numbers
System.out.println("Input Five Integer Values:");
for (int i = 0; i < 5; i++)
{
numbers[i] = input.nextInt();
}
//Write to file
// 1. Write name
output.writeUTF(name);
// 2. Write int array object
output.writeObject(numbers);
// 3. Write double
output.writeDouble(5.5);
// 4. Write date object
output.writeObject(new java.util.Date());
// 5. Write utf string
output.writeUTF("Exercise17_05.dat");
// Close the stream
output.close();
//Create an input stream for file
ObjectInputStream report
= new ObjectInputStream
(new FileInputStream("Exercise17_05.dat"));
// Read from file
// 1. Read name
System.out.println("Name: " + name);
// 2. Read int array object
int[] newNumbers = (int[]) (input.readObject());
System.out.println("Integers: " + Arrays.toString(newNumbers));
// 3. Read double
double doubleValue = report.readDouble();
System.out.println("Double value: " + doubleValue);
// 4. Read date object
Date date = (java.util.Date) (report.readObject());
System.out.println("DateTime: " + date);
// 5. Read utf string
String fileName = report.readUTF();
System.out.println("File name: " + fileName);
// Close the stream
input.close();
}
【问题讨论】:
-
"但不断收到 "Exception in Thread" 错误" 要学习的最重要的事情之一是,当编译器或运行时给您错误消息时,您必须阅读并理解它以找出问题所在,当您寻求他们的帮助时,您必须告诉其他人错误信息是什么,这样他们才能找出问题所在。请编辑您的问题以包含特定的错误消息和堆栈跟踪。
-
@kaya3 有错误信息
-
您的程序在 Date 对象之前读取 double,但问题是 Date 对象在 double 之前。这可能是你的问题吗?
-
也许问题是您从程序的第一部分打印名称和数组,而不是从文件中读取它们?
-
您混淆了变量
input、report和其他变量。尝试将段分成方法。 1) 读取流 2) 写入文件 3) 从文件打印
标签: java arrays serialization