콘솔 출력을 Java의 문자열로 리디렉션
반환 유형이 VOID 이고 콘솔에 직접 인쇄되는 함수가 하나 있습니다 .
그러나 작업 할 수 있도록 해당 출력이 문자열로 필요합니다.
반환 유형이 VOID 인 함수로 변경할 수 없으므로 해당 출력을 문자열로 리디렉션해야합니다.
JAVA에서 어떻게 리디렉션 할 수 있습니까?
stdout을 문자열로 리디렉션하는 것과 관련된 많은 질문이 있지만 일부 기능의 출력이 아닌 사용자로부터 가져온 입력 만 리디렉션합니다.
함수가로 인쇄중인 경우 System.out
사용자가 제공 한로 이동하도록 System.setOut
변경 하는 방법을 사용하여 해당 출력을 캡처 할 수 있습니다. 에 연결된 파일을 만드는 경우 출력을 .System.out
PrintStream
PrintStream
ByteArrayOutputStream
String
예:
// Create a stream to hold the output
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
// IMPORTANT: Save the old System.out!
PrintStream old = System.out;
// Tell Java to use your special stream
System.setOut(ps);
// Print some output: goes to your special stream
System.out.println("Foofoofoo!");
// Put things back
System.out.flush();
System.setOut(old);
// Show what happened
System.out.println("Here: " + baos.toString());
이 프로그램은 한 줄만 인쇄합니다.
Here: Foofoofoo!
다음은 ConsoleOutputCapturer라는 유틸리티 클래스입니다. 출력을 기존 콘솔로 이동할 수 있지만 장면 뒤에서 출력 텍스트를 계속 캡처합니다. 시작 / 중지 방법으로 캡처 할 내용을 제어 할 수 있습니다. 즉, start를 호출하여 콘솔 출력 캡처를 시작하고 캡처가 완료되면 start-stop 호출 사이의 시간 창에 대한 콘솔 출력을 보유하는 String 값을 반환하는 stop 메서드를 호출 할 수 있습니다. 이 클래스는 스레드로부터 안전하지 않습니다.
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.List;
public class ConsoleOutputCapturer {
private ByteArrayOutputStream baos;
private PrintStream previous;
private boolean capturing;
public void start() {
if (capturing) {
return;
}
capturing = true;
previous = System.out;
baos = new ByteArrayOutputStream();
OutputStream outputStreamCombiner =
new OutputStreamCombiner(Arrays.asList(previous, baos));
PrintStream custom = new PrintStream(outputStreamCombiner);
System.setOut(custom);
}
public String stop() {
if (!capturing) {
return "";
}
System.setOut(previous);
String capturedValue = baos.toString();
baos = null;
previous = null;
capturing = false;
return capturedValue;
}
private static class OutputStreamCombiner extends OutputStream {
private List<OutputStream> outputStreams;
public OutputStreamCombiner(List<OutputStream> outputStreams) {
this.outputStreams = outputStreams;
}
public void write(int b) throws IOException {
for (OutputStream os : outputStreams) {
os.write(b);
}
}
public void flush() throws IOException {
for (OutputStream os : outputStreams) {
os.flush();
}
}
public void close() throws IOException {
for (OutputStream os : outputStreams) {
os.close();
}
}
}
}
참조 URL : https://stackoverflow.com/questions/8708342/redirect-console-output-to-string-in-java
'programing' 카테고리의 다른 글
C #의 자동 속성이란 무엇이며 그 용도는 무엇입니까? (0) | 2021.01.06 |
---|---|
f, T, C, M, P, C, K, # 등과 같은 색상 상자에있는 문자의 Xcode intellisense 의미 (0) | 2021.01.06 |
익명 유형에 대한 Equals 구현이 필드를 비교하는 이유는 무엇입니까? (0) | 2021.01.06 |
firefox의 console.log가 작동하지 않습니까? (0) | 2021.01.06 |
다중 데이터베이스 연결 및 Yii 2.0 (0) | 2021.01.06 |