我正在尝试读取 csv 文件并在控制台中显示输出。但是,我不明白为什么我收到文件结束异常并且控制台中没有显示任何内容?
异常消息为:
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readUTF(DataInputStream.java:609)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at ByteIO.main(ByteIO.java:17)
我的代码是:
import java.io.*;
import javax.swing.*;
public class ByteIO
{
public static void main(String[] args)
{
try
{
FileInputStream fis = new FileInputStream("BaseballNames1.csv");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
while(dis.available() > 0)
{
String header = (dis.readUTF());
String firstName = (dis.readUTF());
String lastName = (dis.readUTF());
String fullName = (firstName + " " + lastName);
int birthDay = (dis.readInt());
int birthMonth = (dis.readInt());
int birthYear = (dis.readInt());
String birthDate = (birthMonth + "/" + birthDay + "/" + birthYear);
int weight = (dis.readInt());
double height = (dis.readDouble());
System.out.println( header + fullName + birthDate + weight + height);
dis.close();
}
}
catch(EOFException eof)
{
System.out.println("End of File!");
}
catch(FileNotFoundException fe)
{
System.out.println("File not found!");
}
catch(IOException ie)
{
ie.printStackTrace();
}
}
}
我猜你的文件不是二进制数据文件,而是充满了文本。如果是这样,请使用扫描仪或读取器,例如包装在缓冲读取器中的文件读取器,而不是 DataInputStream。
编辑:这是一个CSV文件,所以它当然是文本!
您可能希望使用CSV解析器以及BufferedReader或Scanner。
您没有用writeUTF(),
写入文件,因此readUTF()
无法读取它。参见Javadoc。CSV 文件是文本,而不是由writeUTF().
生成的文件