【问题标题】:Java EOFException on reading a file读取文件时出现 Java EOFException
【发布时间】:2012-08-10 03:26:36
【问题描述】:

我正在使用此代码读取 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();

【问题讨论】:

  • 尝试为您的invoicedata 文件指定完整的文件系统路径。
  • 它们在同一个路径中。一切都与路径有关。
  • 您是否也尝试过确保以与写入数据相同的顺序读取数据?提供的示例代码似乎没有这样做。

标签: java io stream datainputstream


【解决方案1】:

您正在按此顺序写入数据:

            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 之前。

【讨论】:

  • 没关系,它终于奏效了。所以我需要按照我写的顺序读取数据吗?
  • @user962206 我尝试运行您的代码并将数据按相同的顺序排列,我能够读取所有数据。您仍然会遇到异常,因为您正在阅读直到 EOF(这很好)。
猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多