读取和写入二进制文件java.io.EOFException

时间:2015-04-10 14:34:40

标签: java file binary readfile writefile

我希望程序从文件items.dat中读取信息,然后创建另一个名为availableItems.dat的文件,其中包含仅可用项目(数量大于0)的信息(条形码,数量,价格),然后是出售所有这些物品的预期收入。预期收入可以衡量所有项目的数量*价格的总和...我这样做但是有EOFException例外我不知道为什么?

文件中的

信息记录如下:

77777 5 6.7 .. .. 到6件

我的代码是:

import java.io.*;
class items{
public static void main(String[] args) throws IOException{



File f=new File("items.dat");

FileInputStream ff=new FileInputStream(f); 

DataInputStream df=new DataInputStream(ff);

int[] barcod=new int[6];
int[] quan=new int[6];
double[] price=new double[6]; 
 int i=0;
 try{
while (i<barcod.length)
{

barcod[i]=df.readInt();
quan[i]=df.readInt();
 price[i]=df.readDouble();

i++;
}

File f2=new File("availableItems.dat");
FileOutputStream ff2=new FileOutputStream(f2);
DataOutputStream dou=new DataOutputStream(ff2);

int s=0;
double sumquan=0;
double sumpri=0;
while (s<6)
{
if (quan[s]!=0)
{
dou.writeInt(barcod[s]);
dou.writeInt(quan[s]);
dou.writeDouble(price[s]);
sumpri+=price[s];
sumquan+=quan[s];

}
s++;
}
dou.writeDouble(sumpri*sumquan);
}


catch(EOFException e){
            System.out.println(e);

        }
        finally{
             df.close();  
        }
    }
} 

1 个答案:

答案 0 :(得分:0)

在每次循环迭代中,您正在从文件中读取太多字节。到达第6个项目时,文件中没有足够的字节可供阅读。

重新检查文件的格式。鉴于您的代码,它应该是96字节长(2英寸* 4字节+ 1双* 8字节= 16字节* 6项)。在十六进制编辑器中打开文件会有所帮助。

您可能需要使用readFloat()代替;只读取文件中的4个字节而不是8个字节。