콘솔 출력을 txt 파일에 쓰는 방법
이 코드 제안 ( http://www.daniweb.com/forums/thread23883.html# )을 사용하여 콘솔 출력을 txt 파일에 쓰려고 시도했지만 성공하지 못했습니다. 뭐가 문제 야?
try {
//create a buffered reader that connects to the console, we use it so we can read lines
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//read a line from the console
String lineFromInput = in.readLine();
//create an print writer for writing to a file
PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
//output to the file a line
out.println(lineFromInput);
//close the file (VERY IMPORTANT!)
out.close();
}
catch(IOException e1) {
System.out.println("Error during reading/writing");
}
다음과 같이해야합니다.
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);
두 번째 진술은 핵심입니다. System.out
제공된 PrintStream 값이되도록 "final" 속성 의 값을 변경합니다 .
표준 입력 및 오류 스트림을 변경하는 유사한 방법 ( setIn
및 setErr
)이 있습니다. java.lang.System
자세한 내용 은 javadocs를 참조하십시오.
위의보다 일반적인 버전은 다음과 같습니다.
PrintStream out = new PrintStream(
new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);
경우 append
이며 true
, 스트림은 그것을 잘라내는 대신 기존 파일에 추가합니다. 경우 autoflush
인 true
바이트 어레이는 하나, 기입 될 때마다, 출력 버퍼 플러시 println
방법이라고, 또는이 \n
기록된다.
Log4j , Logback 또는 표준 Java java.util.logging 하위 시스템과 같은 로깅 하위 시스템을 사용하는 것이 일반적으로 더 나은 아이디어라고 덧붙이고 싶습니다 . 이들은 런타임 구성 파일을 통한 세분화 된 로깅 제어, 롤링 로그 파일 지원, 시스템 로깅에 대한 피드 등을 제공합니다.
또는 "로깅"하지 않는 경우 다음을 고려하십시오.
일반적인 셸을 사용하면 표준 출력 (또는 표준 오류)을 명령 줄의 파일로 리디렉션 할 수 있습니다. 예 :
$ java MyApp > output.txt
자세한 내용은 셸 자습서 또는 수동 항목을 참조하십시오.
에
out
쓰는 대신 메서드 매개 변수로 전달되거나 싱글 톤 또는 종속성 주입을 통해 전달 된 스트림 을 사용하도록 애플리케이션을 변경할 수 있습니다System.out
.
변경하면 System.out
이것이 발생할 것으로 예상하지 않는 JVM의 다른 코드에 대해 심각한 놀라움을 유발할 수 있습니다. (올바르게 설계된 Java 라이브러리는 System.out
및 에 의존하지 System.err
않지만 운이 좋지 않을 수 있습니다.)
코드를 작성할 필요가 없습니다. 콘솔의 cmd에서 다음과 같이 작성할 수 있습니다.
javac myFile.java
java ClassName > a.txt
출력 데이터는 a.txt 파일에 저장됩니다.
콘솔 출력 을 보존 하기 위해 , 즉 파일에 쓰고 콘솔에 표시되도록하려면 다음과 같은 클래스를 사용할 수 있습니다.
public class TeePrintStream extends PrintStream {
private final PrintStream second;
public TeePrintStream(OutputStream main, PrintStream second) {
super(main);
this.second = second;
}
/**
* Closes the main stream.
* The second stream is just flushed but <b>not</b> closed.
* @see java.io.PrintStream#close()
*/
@Override
public void close() {
// just for documentation
super.close();
}
@Override
public void flush() {
super.flush();
second.flush();
}
@Override
public void write(byte[] buf, int off, int len) {
super.write(buf, off, len);
second.write(buf, off, len);
}
@Override
public void write(int b) {
super.write(b);
second.write(b);
}
@Override
public void write(byte[] b) throws IOException {
super.write(b);
second.write(b);
}
}
다음과 같이 사용됩니다.
FileOutputStream file = new FileOutputStream("test.txt");
TeePrintStream tee = new TeePrintStream(file, System.out);
System.setOut(tee);
( 완전하지 않은 아이디어 )
다음 방법을 만듭니다.
public class Logger {
public static void log(String message) {
PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
out.write(message);
out.close();
}
}
(위 클래스에 적절한 IO 처리를 포함하지 않았으므로 컴파일되지 않습니다. 직접 수행하십시오. 파일 이름 구성도 고려하십시오. "true"인수에 유의하십시오. 이는 파일이 다시 생성되지 않음을 의미합니다. 메서드를 호출 할 때마다)
그런 다음 System.out.println(str)
전화 대신Logger.log(str)
이 수동 접근 방식은 바람직하지 않습니다. 로깅 프레임 워크 사용-slf4j, log4j , commons-logging 등
논의 된 여러 프로그래밍 방식 외에도 또 다른 옵션은 셸에서 표준 출력을 리디렉션하는 것입니다. 다음은 몇 가지 Unix 및 DOS 예제입니다.
당신은 사용할 수 있습니다 System.setOut ()를 통해 모든 출력을 리디렉션 프로그램의 시작 부분에서 System.out
자신에 PrintStream
.
이것은 당신이하려는 일에 대한 내 생각이며 잘 작동합니다.
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new FileWriter("c://output.txt"));
try {
String inputLine = null;
do {
inputLine=in.readLine();
out.write(inputLine);
out.newLine();
} while (!inputLine.equalsIgnoreCase("eof"));
System.out.print("Write Successful");
} catch(IOException e1) {
System.out.println("Error during reading/writing");
} finally {
out.close();
in.close();
}
}
콘솔 출력을 텍스트 파일에 쓰는 가장 쉬운 방법은
//create a file first
PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
outputfile.print("your output");
outputfile.close();
콘솔 출력을 txt 파일에 쓰려면
public static void main(String[] args) {
int i;
List<String> ls = new ArrayList<String>();
for (i = 1; i <= 100; i++) {
String str = null;
str = +i + ":- HOW TO WRITE A CONSOLE OUTPUT IN A TEXT FILE";
ls.add(str);
}
String listString = "";
for (String s : ls) {
listString += s + "\n";
}
FileWriter writer = null;
try {
writer = new FileWriter("final.txt");
writer.write(listString);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
텍스트 파일이 아닌 PDF를 생성하려면 아래에 주어진 종속성을 사용하십시오.
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.0.6</version>
</dependency>
PDF를 생성하려면 다음 코드를 사용하십시오.
public static void main(String[] args) {
int i;
List<String> ls = new ArrayList<String>();
for (i = 1; i <= 100; i++) {
String str = null;
str = +i + ":- HOW TO WRITE A CONSOLE OUTPUT IN A PDF";
ls.add(str);
}
String listString = "";
for (String s : ls) {
listString += s + "\n";
}
Document document = new Document();
try {
PdfWriter writer1 = PdfWriter
.getInstance(
document,
new FileOutputStream(
"final_pdf.pdf"));
document.open();
document.add(new Paragraph(listString));
document.close();
writer1.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter("C:\\testing.txt"));
} catch (IOException e) {
e.printStackTrace();
}
out.println("output");
out.close();
FileWriter의 절대 경로를 사용하고 있습니다. 나에게 매력처럼 작용하고있다. 또한 파일이 해당 위치에 있는지 확인하십시오. 그렇지 않으면 FileNotFoundException이 발생합니다. 이 방법은 파일을 찾을 수없는 경우 대상 위치에 새 파일을 생성하지 않습니다.
In netbeans, you can right click the mouse and then save as a .txt file. Then, based on the created .txt file, you can convert to the file in any format you want to get.
참고URL : https://stackoverflow.com/questions/1994255/how-to-write-console-output-to-a-txt-file
'Programing' 카테고리의 다른 글
El Capitan으로 업그레이드 한 후 잘못된 활성 개발자 경로 오류 (0) | 2020.11.26 |
---|---|
알려진 두 값 사이의 문자열 찾기 (0) | 2020.11.26 |
asp.net MVC EditorFor에서 생성 한 HTML ID를 얻는 방법 (0) | 2020.11.26 |
빌드 전 단계로 Hudson에서 다른 작업을 트리거하려면 어떻게해야합니까? (0) | 2020.11.25 |
Flask 사용자 인증 (0) | 2020.11.25 |