2015-04-10 2 views
-1

Мне нужна программа, которая считывает информацию из файла items.dat, а затем создает другой файл с именем availableItems.dat, содержащий информацию (штрих-код, количество, цену) только доступные товары (с количеством более 0), за которым следует ожидаемый доход от продажи всех этих предметов. Ожидаемый доход можно измерить как сумму количества * цены для всех предметов ... Я сделал это, но есть исключение EOFException, я не знаю почему?чтение и запись в двоичных файлах java.io.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

Был ли Item.dat написан с помощью DataOutputStream (или эквивалент)? – immibis

+2

Java не является Javascript, пожалуйста, не используйте фрагменты JavaScript для Java. –

+0

Из вашего описания файла он вообще не выглядит двоичным. Это похоже на номера, разделенные пробелами. Это на самом деле то, что есть, или это просто иллюстративно? –

ответ

0

Вы читаете слишком много байтов из файла в каждой итерации цикла. По времени вы дойдете до 6-го элемента, у вас не осталось достаточного количества байтов в файле для чтения.

Повторно проверьте формат файла. Учитывая ваш код, он должен быть длиной 96 байт (2 ints * 4 байта + 1 двойной * 8 байтов = 16 байт * 6 элементов). Открытие файла в шестнадцатеричном редакторе поможет.

Вместо этого может потребоваться использовать readFloat(); который считывает только 4 байта из файла вместо 8.

+0

Я решил проблему исключения, но как проверить, содержит ли файл информацию (штрих-код, количество, цену) только доступных предметов (количество которых больше 0)? – swa

+0

это items.dat «í, @! ÎÕÛ @ ≥≈ @ \ ÁT @ 4Ä~, d @ P \ (ı¬èè√_ @ ôôôôôö – swa

+0

и этот availableItems.dat« í, @! ≥≈ @ \ ÁT @ 4Äè√_ @ ôôôôö @ Ñôôôôô – swa

Смежные вопросы