console.writeline
과 의 기술적 차이점은 정확히 무엇입니까 System.out.println
? 나는 System.out.println
표준 출력에 쓰는 것을 알고 있지만 이것은 콘솔과 같지 않습니까?
에 대한 문서 를 완전히 이해하지 못합니다 console.writeline
.
console.writeline
과 의 기술적 차이점은 정확히 무엇입니까 System.out.println
? 나는 System.out.println
표준 출력에 쓰는 것을 알고 있지만 이것은 콘솔과 같지 않습니까?
에 대한 문서 를 완전히 이해하지 못합니다 console.writeline
.
답변:
System.out
/ .err
/.in
및 사용의 주요 차이점은 다음 과 System.console()
같습니다.
System.console()
애플리케이션이 터미널에서 실행되지 않는 경우 null을 반환합니다 (애플리케이션에서 처리 할 수 있음 ).System.console()
에코 문자없이 암호를 읽는 방법을 제공합니다.System.out
그리고 System.err
그동안 기본 플랫폼 인코딩을 사용하는 Console
클래스 출력 방법은 콘솔 인코딩을 사용이 후자의 동작은 즉시 명확하지 않을 수 있지만 다음과 같은 코드는 차이점을 보여줄 수 있습니다.
public class ConsoleDemo {
public static void main(String[] args) {
String[] data = { "\u250C\u2500\u2500\u2500\u2500\u2500\u2510",
"\u2502Hello\u2502",
"\u2514\u2500\u2500\u2500\u2500\u2500\u2518" };
for (String s : data) {
System.out.println(s);
}
for (String s : data) {
System.console().writer().println(s);
}
}
}
시스템 인코딩이 windows-1252이고 기본 콘솔 인코딩이 IBM850 인 Windows XP에서이 코드는 다음과 같이 작성합니다.
???????
?Hello?
???????
┌─────┐
│Hello│
└─────┘
이 동작은 시스템 인코딩과 다른 인코딩으로 설정된 콘솔 인코딩에 따라 다릅니다. 이것은 많은 역사적 이유로 Windows의 기본 동작입니다.
프로그램이 대화 형 프롬프트에서 실행되고 stdin 또는 stdout을 리디렉션하지 않은 경우 기본적으로 동일합니다.
public class ConsoleTest {
public static void main(String[] args) {
System.out.println("Console is: " + System.console());
}
}
결과 :
$ java ConsoleTest
Console is: java.io.Console@2747ee05
$ java ConsoleTest </dev/null
Console is: null
$ java ConsoleTest | cat
Console is: null
그 이유 Console
는 대화 형 명령 줄에서 실행중인 특정 경우에 유용한 기능을 제공하기위한 것입니다.
Console
요청하고 멋지게 큐에 넣을 수 있지만 System.in/out을 사용하면 모든 프롬프트가 동시에 나타납니다).스트림 중 하나 라도 리디렉션 하면 System.console()
반환됩니다 null
. 또 다른 자극은 Console
Eclipse 또는 Maven과 같은 다른 프로그램에서 생성 될 때 사용 가능한 개체가 없는 경우가 많다는 것 입니다.
먼저 귀하의 질문에 약간의 오류가 포함되어 있습니다. 콘솔 클래스에는 writeline 메소드가 없습니다. 대신 Console 클래스는 PrintWriter를 반환하는 writer () 메서드를 제공합니다. 이 인쇄 작성자는 println ()을 가지고 있습니다.
이제 차이점은 무엇입니까
System.console().writer().println("hello from console");
과
System.out.println("hello system out");
명령 줄에서 응용 프로그램을 실행하면 차이가 없다고 생각합니다. 그러나 콘솔을 사용할 수없는 경우 System.console ()은 System.out이 여전히 존재하는 동안 null을 반환합니다. 이는 애플리케이션을 호출하고 STDOUT을 파일로 리디렉션하는 경우 발생할 수 있습니다.
다음은 방금 구현 한 예입니다.
import java.io.Console;
public class TestConsole {
public static void main(String[] args) {
Console console = System.console();
System.out.println("console=" + console);
console.writer().println("hello from console");
}
}
명령 프롬프트에서 응용 프로그램을 실행하면 다음이 표시됩니다.
$ java TestConsole
console=java.io.Console@93dcd
hello from console
하지만 STDOUT을 파일로 리디렉션하면 ...
$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
at TestConsole.main(TestConsole.java:8)
8 행은 console.writer().println()
입니다.
다음은 / tmp / test의 내용입니다.
console=null
내 설명이 도움이되기를 바랍니다.
Console.writeline
Java 에는 없습니다 . .NET에 있습니다.
콘솔과 표준 출력은 동일하지 않습니다. 언급 한 Javadoc 페이지를 읽으면 명령 줄에서 호출되고 출력이 다음과 같이 리디렉션되지 않는 경우에만 애플리케이션이 콘솔에 액세스 할 수 있음을 알 수 있습니다.
java -jar MyApp.jar > MyApp.log
다른 경우는 SimonJ의 답변에서 다루어 지지만 Console.writeline
.