JavaRush/Java блог/Архив info.javarush/Вопрос про исключения
Wrell
40 уровень

Вопрос про исключения

Статья из группы Архив info.javarush
участников
Здравствуйте. Нашел на Интуите такой код: import java.io.*; public class Test { public Test() { } public static void main(String[] args) { Test test = new Test(); try { test.doFileInput("bogus.file"); } catch (IOException ex) { System.out.println("Second exception handle stack trace"); ex.printStackTrace(); } } private String doFileInput(String fileName) throws FileNotFoundException,IOException { String retStr = ""; java.io.FileInputStream fis = null; try { fis = new java.io.FileInputStream(fileName); } catch (FileNotFoundException ex) { System.out.println("First exception handle stack trace"); ex.printStackTrace(); throw ex; } return retStr; } } Ожидается, что вывод будет таким и в дебагере всё так и работает. First exception handle stack trace java.io.FileNotFoundException: bogus.file (Не удается найти указанный файл) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:146) at java.io.FileInputStream.(FileInputStream.java:101) at com.javarush.Test.doFileInput(Test.java:25) at com.javarush.Test.main(Test.java:11) Second exception handle stack trace java.io.FileNotFoundException: bogus.file (Не удается найти указанный файл) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:146) at java.io.FileInputStream.(FileInputStream.java:101) at com.javarush.Test.doFileInput(Test.java:25) at com.javarush.Test.main(Test.java:11) Но когда просто запускаю программу, печатает что попало, например выводит сообщения в стек-трейсе, вот так: java.io.FileNotFoundException: bogus.file (Не удается найти указанный файл) First exception handle stack trace at java.io.FileInputStream.open(Native Method) Second exception handle stack trace at java.io.FileInputStream.(FileInputStream.java:146) at java.io.FileInputStream.(FileInputStream.java:101) at com.javarush.Test.doFileInput(Test.java:25) at com.javarush.Test.main(Test.java:11) java.io.FileNotFoundException: bogus.file (Не удается найти указанный файл) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:146) at java.io.FileInputStream.(FileInputStream.java:101) at com.javarush.Test.doFileInput(Test.java:25) at com.javarush.Test.main(Test.java:11) Вопрос: кто-нибудь знает, почему так происходит и как это исправить?
Комментарии (6)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
blacky
Уровень 23
7 июня 2016, 23:20
После каждой записи на консоль, т.е. System.out.println(), делай System.out.flush()
Wrell
Уровень 40
8 июня 2016, 08:23
Не помогло, всё равно всё перемешивается.
blacky
Уровень 23
8 июня 2016, 13:30
Посмотрел исходники ex.printStackTrace() пишет в printStackTrace(System.err), т.е. в отдельный поток ошибок. Если направишь стек-трейс в System.out, т.е. на консоль, то получишь как раз то, что ты хотел. System.out и System.err два независимых потока. Нужно написать так:
ex.printStackTrace(System.out);
Wrell
Уровень 40
8 июня 2016, 20:56
Спасибо! Так заработало.
AndreGold
Уровень 28
7 июня 2016, 21:00
у вас в корне проекта есть файл bogus с расширением .file?

Нет? Я так и думал.

Ну тогда создайте, и напишите, что произошло?
Wrell
Уровень 40
8 июня 2016, 08:22
Если создаю файл, он его корректно считывает и ничего не выдает, а мне то нужно исключение и понять почему строчки перемешиваются.