Java: System.console()에서 입력을 받는 방법
사용자로부터 입력을 받기 위해 콘솔클래스를 사용하려고 하는데 호출 시 null 객체가 반환됩니다.System.console()System.console을 사용하기 전에 변경해야 합니까?
Console co=System.console();
System.out.println(co);
try{
String s=co.readLine();
}
콘솔을 사용하여 입력 읽기(IDE 외부에서만 사용 가능):
System.out.print("Enter something:");
String input = System.console().readLine();
다른 방법(어디서나 사용 가능):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter String");
String s = br.readLine();
System.out.print("Enter Integer:");
try {
int i = Integer.parseInt(br.readLine());
} catch(NumberFormatException nfe) {
System.err.println("Invalid Format!");
}
}
}
System.console()은 IDE에서 null을 반환합니다.
그래서 만약 당신이 정말로 이 제품을 사용해야 한다면System.console()McDowell에서 이 솔루션을 읽어보십시오.
Scanner in = new Scanner(System.in);
int i = in.nextInt();
String s = in.next();
콘솔/키보드에서 입력 문자열을 읽는 방법은 몇 가지가 있습니다.다음 샘플 코드는 Java를 사용하여 콘솔/키보드에서 문자열을 읽는 방법을 보여 줍니다.
public class ConsoleReadingDemo {
public static void main(String[] args) {
// ====
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter user name : ");
String username = null;
try {
username = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("You entered : " + username);
// ===== In Java 5, Java.util,Scanner is used for this purpose.
Scanner in = new Scanner(System.in);
System.out.print("Please enter user name : ");
username = in.nextLine();
System.out.println("You entered : " + username);
// ====== Java 6
Console console = System.console();
username = console.readLine("Please enter user name : ");
System.out.println("You entered : " + username);
}
}
사용된 코드의 마지막 부분java.io.Consoleclass. 콘솔인스턴스를 가져올 수 없습니다.System.console()이클립스를 통해 데모 코드를 실행할 때 사용합니다.이클립스는 응용 프로그램을 시스템 콘솔을 사용한 최상위 프로세스가 아닌 백그라운드 프로세스로 실행하기 때문입니다.
환경에 따라 달라집니다.Swing UI를 실행하는 경우javaw예를 들어 표시할 콘솔이 없습니다.IDE 내에서 실행 중인 경우 콘솔 IO의 특정 IDE 처리에 크게 의존합니다.
하지만 명령줄을 보면 괜찮을 거예요.샘플:
import java.io.Console;
public class Test {
public static void main(String[] args) throws Exception {
Console console = System.console();
if (console == null) {
System.out.println("Unable to fetch console");
return;
}
String line = console.readLine();
console.printf("I saw this line: %s", line);
}
}
이 조작은java:
> javac Test.java
> java Test
Foo <---- entered by the user
I saw this line: Foo <---- program output
또 다른 옵션은System.in(이것들은 로 묶는 것이 좋습니다)BufferedReader줄을 읽다, 또는 사용하다(다시 감다)System.in).
콘솔에서 읽기에 대한 좋은 답변을 찾았습니다. '스캐너'를 사용하여 콘솔에서 읽습니다.
import java.util.Scanner;
String data;
Scanner scanInput = new Scanner(System.in);
data= scanInput.nextLine();
scanInput.close();
System.out.println(data);
이거 먹어봐.이게 도움이 되길 바라.
String cls0;
String cls1;
Scanner in = new Scanner(System.in);
System.out.println("Enter a string");
cls0 = in.nextLine();
System.out.println("Enter a string");
cls1 = in.nextLine();
다음은 athspk의 답변을 취합하여 사용자가 "exit"를 입력할 때까지 지속적으로 루프하는 답변으로 만듭니다.또한 이 코드를 테스트 가능한 것으로 만든 후속 답변을 작성했습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LoopingConsoleInputExample {
public static final String EXIT_COMMAND = "exit";
public static void main(final String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter some text, or '" + EXIT_COMMAND + "' to quit");
while (true) {
System.out.print("> ");
String input = br.readLine();
System.out.println(input);
if (input.length() == EXIT_COMMAND.length() && input.toLowerCase().equals(EXIT_COMMAND)) {
System.out.println("Exiting.");
return;
}
System.out.println("...response goes here...");
}
}
}
출력 예:
Enter some text, or 'exit' to quit
> one
one
...response goes here...
> two
two
...response goes here...
> three
three
...response goes here...
> exit
exit
Exiting.
IDE 내에서 응용 프로그램을 실행할 때 System.console()이 null이 되는 문제에 대처할 수 있는 Text-IO 라이브러리를 작성했습니다.
McDowell이 제안한 것과 유사한 추상화 레이어를 도입합니다.System.console()이 null을 반환하면 라이브러리는 Swing 기반 콘솔로 전환됩니다.
또한 Text-IO에는 다음과 같은 유용한 기능이 있습니다.
- 는 다양한 데이터 유형의 값 읽기를 지원합니다.
- 중요한 데이터를 읽을 때 입력을 마스킹할 수 있습니다.
- 를 사용하면 목록에서 값을 선택할 수 있습니다.
- 를 사용하면 입력 값에 대한 제약 조건(형식 패턴, 값 범위, 길이 제약 조건 등)을 지정할 수 있습니다.
사용 예:
TextIO textIO = TextIoFactory.getTextIO();
String user = textIO.newStringInputReader()
.withDefaultValue("admin")
.read("Username");
String password = textIO.newStringInputReader()
.withMinLength(6)
.withInputMasking(true)
.read("Password");
int age = textIO.newIntInputReader()
.withMinVal(13)
.read("Age");
Month month = textIO.newEnumInputReader(Month.class)
.read("What month were you born in?");
textIO.getTextTerminal().println("User " + user + " is " + age + " years old, " +
"was born in " + month + " and has the password " + password + ".");
이 이미지에서는 Swing 기반 콘솔에서 위의 코드가 실행되고 있음을 알 수 있습니다.
시스템을 사용합니다.에
http://www.java-tips.org/java-se-tips/java.util/how-to-read-input-from-console.html
언급URL : https://stackoverflow.com/questions/4644415/java-how-to-get-input-from-system-console
'source' 카테고리의 다른 글
| C와 C++는 구조 내 어레이의 멤버별 할당을 지원하지만 일반적으로는 지원하지 않는 이유는 무엇입니까? (0) | 2022.08.14 |
|---|---|
| 왜 sin_addr이 구조체 내부에 in_addr이 있습니까? (0) | 2022.08.14 |
| CMake에서의 디버깅과 릴리스 (0) | 2022.08.14 |
| Vue.js를 사용하여 단일 파일 구성 요소의 메서드에서 계산된 속성에 액세스하는 방법 (0) | 2022.08.14 |
| /proc/ 파일을 해석해도 안전한가요? (0) | 2022.08.14 |