【问题标题】:read and write in binary files java.io.EOFException读取和写入二进制文件 java.io.EOFException
【发布时间】:2015-06-16 07:59:48
【问题描述】:

我想要从文件 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();  
        }
    }
} 

【问题讨论】:

  • items.dat 是用DataOutputStream(或等效项)编写的吗?
  • Java 不是 Javascript,请不要为 Java 使用 Javascript 堆栈 sn-ps。
  • 从您对文件的描述来看,它看起来根本不是二进制文件。它看起来像空格分隔的数字。这是真的吗,还是只是说明性的?
  • 对不起,我没有检查
  • items.dat 是二进制文件

标签: java file binary readfile writefile


【解决方案1】:

您在每次循环迭代中从文件中读取的字节过多。到第 6 项时,文件中没有足够的字节来读取。

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

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

【讨论】:

  • 我解决了异常的问题,但是如何检查文件是否只包含可用项目(数量大于0)的信息(条形码、数量、价格)?
  • this items.dat «í,@!ÎÕÛ@≥≈@\ÁT@4Ä~,d@P(ı¬èè√_@ôôôôôö
  • 还有这个 availableItems.dat «í,@!≥≈@\ÁT@4Äè√_@ôôôôôö@ÑÂôôôôô
  • 当我打印 (s 的值) ..print (6) .. 正确的是 4 怎么做?
  • @reem,如果您在检查文件方面仍需要帮助,请发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多