2013-09-18 2 views
0

Вот как я выписываю свой файл.Понимание потоков данных и обработка их исключений

BufferedReader read = new BufferedReader(new FileReader(filetoreadfrom));  
    FileOutputStream fileStream = new FileOutputStream(filetowriteto); 
    DataOutputStream dataStream = new DataOutputStream(fileStream); 
    String temp; 
    while((temp = read.readLine()) != null){ 
     String[]arrayTemp = temp.split("\\|"); 
     dataStream.writeInt(Integer.parseInt(arrayTemp[0])); 
     dataStream.writeInt(Integer.parseInt(arrayTemp[1])); 
     dataStream.writeUTF(arrayTemp[2]); } 

Так что я пытаюсь записать двоичный файл и, похоже, работает нормально. Но когда я пытаюсь прочитать это, я получаю IOExceptions.

Так я читаю в своем файле.

DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("data.bin"))); 
    int one,two,eight; 
    String three, 

    while(true){ 
     one = in.readInt(); 
     two = in.readInt(); 
     three = in.readUTF();} 

Я смотрел на страницы учебника для потоков данных на

http://docs.oracle.com/javase/tutorial/essential/io/datastreams.html

и от того, что я понимаю, в данном примере это показывает улавливает конец файла состояния путем ловли EOFException? И из того, что я вижу из api, это подкласс IOException, который помогает мне понять, почему я это понимаю.

То, что я не понимаю, - это то, как обращаться с ним, не имея исключения. Я попытался сделать что-то вроде in.read() == -1, затем перерыв, но безрезультатно, я все равно получаю исключение.

+0

Что говорит IOException? Дайте нам трассировку стека. – Dukeling

+0

Поток, который вы опубликовали, ясно говорит о том, что DataStreams обнаруживает условие конца файла, перехватывая EOFException вместо проверки на недопустимое возвращаемое значение. Все реализации методов DataInput используют EOFException вместо возвращаемых значений. –

+0

@ShashankKadne Это утверждение неверно. readLine() возвращает значение null в конце потока. Он не бросает EOFException. – EJP

ответ

0

API уже разработан. Вы не можете изменить, как это работает. Поймайте EOFException отдельно от IOException, закройте поток и перерыв. Когда вы поймаете IOException, запишите ошибку, закройте поток и перерыв.

+0

Так что я не смогу избежать исключения? – user2677821

+0

Конечно нет. Их бросают: вы должны их поймать. – EJP

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