gpt4 book ai didi

读取文件时发生 Java EOFException

转载 作者:行者123 更新时间:2023-12-02 07:38:29 26 4
gpt4 key购买 nike

我正在使用此代码读取 Java 中的文件

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();
}

}

}

现在我想知道为什么我的第一个代码(读取文件的代码)没有打印价格、描述和单位。它不断返回 EOFException

错误专门出现在这一行

desc = in.readUTF();

最佳答案

您正在按以下顺序写入数据:

            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 并抛出(应该如此)EOFException 之前。

关于读取文件时发生 Java EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com