2014-02-23 135 views
0

我正在尝试读取一个csv文件并在控制台中显示输出。但是,我不明白为什么我得到文件异常的结束,并没有显示在控制台中?为什么我在我的Java代码中遇到EOFException?

异常消息是:

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

什么结果你的文件是什么样子?由于你将字符串取出,闻起来应该是一个文本文件,如果是,请使用Reader或Scanner,而不是DataInputStream。请显示您的数据文件的很好的一部分。 –

+0

而'EOFException'也不是真的'运行时错误'。请更准确地使用您的标签。 – EJP

回答

2

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

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

2

您没有使用writeUTF(),写入文件,因此readUTF()无法读取它。看到Javadoc。一个CSV文件是文本,而不是从writeUTF().

相关问题