В рамках метода я экспериментировал с двумя способами вывода на System.out
: один с помощью OutputStreamWriter
, а другой с помощью PrintWriter
.Я обнаружил, что выводится только тот, который находится спереди, а сзади - нет.Это почему?
Это потому, что когда автор первой закрывается неявно, он также закрывается System.out
?
Как я могу заставить оба способа (один за другим) оба вывести?
try (BufferedWriter bw = new BufferedWriter (new PrintWriter(System.out, true))) // specify System.out for the output stream and "true" for automatic flushing.
{
bw.write("system.out->printwriter->bufferedwriter");
bw.write("\n");
// to make sure the content be printed.
// need to flush the output from the buffer to destination
// You can call flush or close
bw.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
try ( BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(System.out)))
{
bw2.write("system.out->outputstreamwriter->bufferedwriter");
bw2.write("\n");
// need to flush the output from the buffer to destination
bw2.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
будет выводить только system.out->printwriter->bufferedwriter
try ( BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(System.out)))
{
bw2.write("system.out->outputstreamwriter->bufferedwriter");
bw2.write("\n");
// need to flush the output from the buffer to destination
bw2.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
try (BufferedWriter bw = new BufferedWriter (new PrintWriter(System.out, true))) // specify System.out for the output stream and "true" for automatic flushing.
{
bw.write("system.out->printwriter->bufferedwriter");
bw.write("\n");
// to make sure the content be printed.
// need to flush the output from the buffer to destination
// You can call flush or close
bw.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
будет выводить только system.out->outputstreamwriter->bufferedwriter