Вот как я выписываю свой файл.Понимание потоков данных и обработка их исключений
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, затем перерыв, но безрезультатно, я все равно получаю исключение.
Что говорит IOException? Дайте нам трассировку стека. – Dukeling
Поток, который вы опубликовали, ясно говорит о том, что DataStreams обнаруживает условие конца файла, перехватывая EOFException вместо проверки на недопустимое возвращаемое значение. Все реализации методов DataInput используют EOFException вместо возвращаемых значений. –
@ShashankKadne Это утверждение неверно. readLine() возвращает значение null в конце потока. Он не бросает EOFException. – EJP