读取文件时的Java EOFEException
我正在用这段代码读取一个Java文件读取文件时的Java EOFEException,java,io,stream,datainputstream,Java,Io,Stream,Datainputstream,我正在用这段代码读取一个Java文件 import java.io.*; public class IOReadDataStreams { public static void main(String[] args)throws IOException{ DataInputStream in = null; try{ in = new DataInputStream( new Buffe
import java.io.*;
public class IOReadDataStreams {
public static void main(String[] args)throws IOException{
DataInputStream in = null;
try{
in = new DataInputStream(
new BufferedInputStream(new FileInputStream("invoicedata")));
int unit;
double price;
String desc;
while(true){
unit = in.readInt();
price = in.readDouble();
desc = in.readUTF();
System.out.println(unit+" " + price +" "+ desc);
}
}catch(EOFException e){
e.printStackTrace();
}
finally{
if(in != null)
in.close();
}
}
}
我试图读取的文件是由这段代码生成的
import java.io.IOException;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
public class IODataStreams {
static final String dataFile = "invoicedata";
static final double[] prices = new double[]{19.99, 9.99,15.99,3.99,4.99};
static final int[] unitCount = new int[]{12,8,13,29,50};
static final String[] desc = new String[]{
"Java T Shirt",
"C# T Shirt",
"PHP T Shirt",
"Ruby T Shirt",
"Go! T Shirt"
};
public static void main(String[] args) throws IOException{
DataOutputStream out = null;
DataInputStream in = null;
try{
out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("invoicedata")));
for(int i = 0 ; i < prices.length; i++){
out.writeUTF(desc[i]);
out.writeInt(unitCount[i]);
out.writeDouble(prices[i]);
}
}finally{
if(out != null)
out.close();
}
}
}
您正在按以下顺序写入数据:
out.writeUTF(desc[i]);
out.writeInt(unitCount[i]);
out.writeDouble(prices[i]);
但是以错误的顺序读取数据:
unit = in.readInt();
price = in.readDouble();
desc = in.readUTF();
您需要以相同的顺序读取和写入数据,特别是UTF
位,因为这不会转换为数字
当我切换这些行以使读写顺序相同时,这就是IOReadDataStreams
输出的内容:
12 19.99 Java T Shirt
8 9.99 C# T Shirt
13 15.99 PHP T Shirt
29 3.99 Ruby T Shirt
50 4.99 Go! T Shirt
在到达文件的EOF并抛出(它应该)EOFEException之前。尝试指定您的
invoicedata
文件的完整文件系统路径。它们位于同一路径中。关于路径,一切都在运行。您是否也尝试过确保您正在以与写入数据相同的顺序读取数据?提供的示例代码似乎没有这样做。不管它最终如何工作。所以我需要按照我写的顺序读取数据?@user962206我试着运行你的代码,并按照相同的顺序读取数据,我能够读取所有数据。您仍然会得到异常,因为您一直在读取EOF(这很好)。
12 19.99 Java T Shirt
8 9.99 C# T Shirt
13 15.99 PHP T Shirt
29 3.99 Ruby T Shirt
50 4.99 Go! T Shirt