2015-05-10 2 views
0

Я начинаю изучать Java I/O. У меня есть двоичный файл с целыми данными в нем, и я пытаюсь читать его с помощью FileInputStream и показывая содержимое файла на консоли. Кажется, я не делаю правильный подход, продолжаю получать -1 Ведьма означает конец файла. Вот мой код.Чтение из двоичного файла с помощью FileInputStream

File f=new File("sunday.dat"); 
FileInputStream fis=new FileInputStream(f); 

try { 
    while (true) { 

     number=fis.read(); 
     System.out.println(number); 

    } 
} catch (EOFException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

fis.close(); 
+0

какую версию Java вы используете? – DasDas

+1

@DasDas Irrelevant. Работа этого кода не зависит от версии. – EJP

+0

'while (true) {...}' будет пытаться выполнить его блок кода бесконечно. Если у вас нет каких-либо условий остановки (или break/return/throw), тогда '-1' будет печататься все время после чтения содержимого файла. Вам нужно переосмыслить свой цикл. BTW, если вы хотите читать данные как текст, используйте 'Reader'. «Потоки» предназначены для двоичных данных. – Pshemo

ответ

2

Кажется, я не делаю правильный подход, продолжают получать -1, что означает конец файла.

Точно так. Это означает конец файла. Вы должны получить его только один раз. Вы продолжаете получать, потому что вы не проверяете его и не выходите из цикла, когда получаете его.

Вместо этого вы, кажется, полагаетесь на ловлю EOFException,, который никогда не выбрасывается этим методом.

+0

Какой подход вы предлагаете решить проблему? лучший способ? изменить условие цикла while? или вы подойдете к проблеме по-другому, спасибо большое! – Ricki

-2

насчет:

byte[] data = new byte[1]; 
    while (number!=-1) { 

    number=fis.read(data); 
    System.out.println(number); 

    } 
+0

Это будет печатать счет вместо данных; напечатает посторонний -1 в конце файла; и полагается на определенную инициализацию, которую вы не указали. – EJP

+0

Число - это число байтов, считанных (= -1, если EOF) – Dien

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