자바 : PrintStream에서 문자열로?


115

특정 유형의 개체와 PrintStream인쇄 할 개체를 가져 와서 해당 개체의 표현을 출력 하는 함수가 있습니다. 이 함수의 출력을 문자열로 캡처하려면 어떻게해야합니까? 구체적으로는 toString방법 으로 사용하고 싶습니다 .

답변:


193

ByteArrayOutputStream버퍼로 사용 :

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final String utf8 = StandardCharsets.UTF_8.name();
    try (PrintStream ps = new PrintStream(baos, true, utf8)) {
        yourFunction(object, ps);
    }
    String data = baos.toString(utf8);

10
모든 리소스를 해제하려면 PrintStream을 닫는 것을 잊지 마십시오.
tobr

9
PrintStream ps = new PrintStream(baos,true,"utf-8");문자셋 혼돈을 피하기 위해 사용 하는 것이 좋습니다
Dr. Max Völkel 2014 년

5
1.7new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8); 이후 사용 가능 , 던지지 않습니다
earcam

2
엄지 @tobr 확실히 좋은 규칙이지만 ByteArrayOutputStream.close()" 영향을 미치지 않는다 가비지 컬렉터에 의해 처리 될 보조 배열 외에 확보 할 자원이없는 한,".
dimo414

ByteArrayOutputStreamtoString(String charsetName)있지만 String 인수 만 허용합니다. 또한있는 ByteArrayOutputStream이되어 있습니다 동기화 아마도 바람직하지 않은,
당황하지 마십시오

31

생성자에 전달 된 ByteArrayOutputStream을 사용하여 PrintStream을 생성 할 수 있으며 나중에 PrintStream에 기록 된 텍스트를 가져 오는 데 사용할 수 있습니다.

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");

5

이전 답변의 통합 인이 답변은 Java 1.7 이상에서 작동합니다. 또한 Streams를 닫는 코드를 추가했습니다.

final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();


-3

문자열 변수 myStrLine을 사용하여 입력 문자열 스트림을 생성하는 inSS라는 스캐너 변수를 정의하고 초기화합니다.

정답 : 스캐너 inSS = new Scanner (myStrLine);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.