Собрал ответ из всех комментариев под вопросом: по кусочку информации из того, из этого и наконец понял, в чём разница.
Возьмём вот такой код:
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
public class Test {
public static void main(String args[]) {
File file = new File("C:" + File.separator + "someFile.txt");
try(PrintWriter writer = new PrintWriter(file)){
writer.println("something....");
} catch (IOException e){
//Здесь будем выводить сообщение об ошибке
}
}
}
printStackTrace()
. В блоке catch
пропишем:
} catch (IOException e){
e.printStackTrace();
}
В случае, если исключение произойдёт, то на экран будет выведен стектрейс + сообщение об ошибке:
java.io.FileNotFoundException: C:/someFile.txt (No such file or directory)
at java.base/java.io.FileOutputStream.open0(Native Method)
at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293)
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:184)
at java.base/java.io.PrintWriter.<init>(PrintWriter.java:309)
at Test.main(Test.java:9)
И сообщение об ошибке, и стектрейс. Два в одном.
System.err.println(e.getMessage())
. Если прописать в блоке catch
это:
} catch (IOException e){
System.err.println(e.getMessage());
}
То на экран будет выведено только сообщение об ошибке, без стектрейса (то есть без списка методов, кто кого вызвал):
C:/someFile.txt (No such file or directory)
Вывод
Исключения нужно конечно нормально обрабатывать, но если всё-таки по какой-то причине вы хотите вывести информацию об исключении в консоль, то пишите e.printStackTrace()
, ведь это выводит более полную информацию, чем System.err.println(e.getMessage())
.
Спасибо всем, кто писал в комментариях или отвечал!