为什么我的Java代码中出现EOFException?

时间:2014-02-23 23:20:26

标签: java java-io datainputstream eofexception

我正在尝试读取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();
  }    
 }
}

2 个答案:

答案 0 :(得分:2)

我猜你的文件不是二进制数据文件,而是填充了文本。如果是这样,请使用扫描程序或读取器,例如包装在BufferedReader中的FileReader,而不是DataInputStream。

编辑:这是一个CSV文件,所以当然是文本!
您可能希望使用CSV解析器以及BufferedReader或Scanner。

答案 1 :(得分:2)

您没有使用writeUTF(),编写文件,因此readUTF()无法读取该文件。见Javadoc。 CSV文件是文本,而不是writeUTF().

的结果