EN
Java - convert PrintStream to String
6 points
In this short article, we would like to show how to convert PrintStream
to String
in Java.
Quick solution:
xxxxxxxxxx
1
//import java.io.ByteArrayOutputStream;
2
//import java.io.PrintStream;
3
4
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
5
PrintStream printStream = new PrintStream(outputStream, true, "UTF-8"))
6
{
7
printStream.println("First message ...");
8
printStream.println("Second message ...");
9
printStream.println("Third message ...");
10
11
String printText = outputStream.toString();
12
}
To convert PrintStream
to String
it is necessary to use some storage to collect PrintStream
output data. As that storage ByteArrayOutputStream
can be used that creates an in-memory array to keep data, returning them as String
on toString()
method call. UTF-8
charset allows using a universal encoding that is supported by almost all operating systems and programs.
xxxxxxxxxx
1
package com.examples;
2
3
import java.io.ByteArrayOutputStream;
4
import java.io.IOException;
5
import java.io.PrintStream;
6
import java.nio.charset.StandardCharsets;
7
8
public class Program {
9
10
private static final String UTF8_NAME = StandardCharsets.UTF_8.name();
11
12
public static void main(String[] args) throws IOException {
13
14
String printText;
15
16
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
17
PrintStream printStream = new PrintStream(outputStream, true, UTF8_NAME))
18
{
19
printStream.println("First message ...");
20
printStream.println("Second message ...");
21
printStream.println("Third message ...");
22
23
printText = outputStream.toString();
24
}
25
26
System.out.print(printText); // First message ...
27
// Second message ...
28
// Third message ...
29
}
30
}
Example output:
xxxxxxxxxx
1
First message ...
2
Second message ...
3
Third message ...
This approach converts ByteArrayOutputStream
to byte
array that is used to create String
with constructor.
xxxxxxxxxx
1
package com.example;
2
3
import java.io.ByteArrayOutputStream;
4
import java.io.IOException;
5
import java.io.PrintStream;
6
import java.nio.charset.StandardCharsets;
7
8
public class Program {
9
10
private static final String UTF8_NAME = StandardCharsets.UTF_8.name();
11
12
public static void main(String[] args) throws IOException {
13
14
String printText;
15
16
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
17
PrintStream printStream = new PrintStream(outputStream, true, UTF8_NAME))
18
{
19
printStream.println("First message ...");
20
printStream.println("Second message ...");
21
printStream.println("Third message ...");
22
23
printText = new String(outputStream.toByteArray(), UTF8_NAME);
24
}
25
26
System.out.print(printText); // First message ...
27
// Second message ...
28
// Third message ...
29
}
30
}
Example output:
xxxxxxxxxx
1
First message ...
2
Second message ...
3
Third message ...
This approach uses custom OutputStream
implementation to convert written data to String
.
xxxxxxxxxx
1
package com.example;
2
3
import java.io.IOException;
4
import java.io.OutputStream;
5
import java.io.PrintStream;
6
import java.nio.charset.StandardCharsets;
7
8
public class Program {
9
10
private static final String UTF8_NAME = StandardCharsets.UTF_8.name();
11
12
public static void main(String[] args) throws IOException {
13
14
String printText;
15
16
try (OutputStream outputStream = new InMemoryOutputStream();
17
PrintStream printStream = new PrintStream(outputStream, true, UTF8_NAME))
18
{
19
printStream.println("First message ...");
20
printStream.println("Second message ...");
21
printStream.println("Third message ...");
22
23
printText = outputStream.toString();
24
}
25
26
System.out.print(printText); // First message ...
27
// Second message ...
28
// Third message ...
29
}
30
31
private static class InMemoryOutputStream extends OutputStream {
32
33
private StringBuilder string = new StringBuilder();
34
35
36
public void write(int b) throws IOException {
37
this.string.append((char) b );
38
}
39
40
public String toString() {
41
return this.string.toString();
42
}
43
}
44
}