자바에서는 사용자 요청사항에 대한 응답 메시지를 전달하기 위해 System 이라는 표준 입출력 클래스를 제공한다.
System 클래스는 다음 세 가지 필드를 가지고 있다.
- out : PrintStream / 표준 출력 스트림
- in : InputStream / 표준 입력 스트림
- err : PrintStream / 표준 에러 출력 스트림
stream은 JAVA의 후반부 내용이어서 아직 정확하게 무엇인지는 모른다..일단은 데이터의 흐름 정도로 알고있자.
표준 출력
System.out()
- print() : 줄바꿈을 하지 않고 출력
- println() : 줄바꿈을 해주면서 출력
- printf() : 지정된 형식의 문자열을 출력
System.out.print("ABCD");
System.out.println("EFGH");
int x = 10;
System.out.printf("%d",x);
//ABCD EFGH
//10
BufferedWriter()
BufferedWrier는 write()명령어를 쓴다고 바로 출력되는 것이 아니라 buffer에 저장해둔뒤 flush나 close될 때 출력 stream에 반영하면서 화면에 출력한다.
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class BufferedWriterTest {
public static void main(String[] args) throws Exception {
//객체선언
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello World!");
bw.flush(); //계속 출력하고자 한다면 flush를 사용
bw.newLine(); //개행 방법1
bw.write("new line\n"); //개행 방법2
bw.write(String.valueOf(100));
//BufferedWiter를 통해 정수 출력을 하려면 String으로 형변환을 해야함
bw.close(); //출력을 끝내고자 하면 close를 사용
}
}
/*
Hello World!
new line
100
*/
표준 입력
System.in은 java.io.* 를 import 해야 사용할 수 있으며 값이 여러방식으로 들어오기 때문에 잘못된 값이 들어온 경우에 에러가 나지 않도록 IOException을 사용하여 예외처리를 필수로 해줘야 한다.
System.in.read()
import java.io.*;
public class SystemIn {
public static void main(String[] args) throws IOException {
//System.in.read()는 아스키코드로 값을 받기때문에 int형으로 받기 위해선 -48을 해야함.
int Num = System.in.read()-48;
//아스키코드에서 char형으로 형변환을 하면 문자열로 입력을 받을 수 있음.
char Char = (char)System.in.read();
//System.in.read(바이트배열, StartByte, EndByte) -> 바이트배열로 입력값 삽입
byte[] Byte = new byte[4096]; // Byte배열 선언
System.in.read(Byte,0,4096); //배열에 값을 입력
String StrByte = new String(Byte); // Byte -> String 전환
StrByte = StrByte.trim(); //전환 시 Byte배열의 쓰레기데이터를 정리
System.out.println("Number : " + Num);
System.out.println("Char : " + Char);
System.out.println("StrByte : " + StrByte);
}
}
/*
입력값 : 9AABCDEFGHIJKLMNOPQRSTUVWXYZ
Number : 9
Char : A
StrByte : ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/
new BufferedReader(new InputStreamReader(System.in))
scanner보다 복잡하긴 하지만 효율성이 더 좋아서 실무에서 자주 사용.
import java.io.*;
public class SystemIn {
public static void main(String[] args) throws IOException {
//BufferedReader 변수 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//readLine()을 사용하여 Enter키를 입력하기 전까지의 값을 입력받음.
String brStr = br.readLine();
//BR은 String변수만 받으므로 Int변수로 변화하려면 Integer.parseInt를 사용해야함.
int brInt = Integer.parseInt(br.readLine());
System.out.println("brStr : " + brStr);
System.out.println("brInt : " + brInt);
}
}
/*
입력값 : ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890
brStr : ABCDEFGHIJKLMNOPQRSTUVWXYZ
brInt : 1234567890
*/
new Scanner(System.in)
import java.io.*;
import java.util.Scanner;
public class SystemIn{
public static void main(String[] args) throws IOException {
//System.in을 사용해서 Scanner의 다양한 메서드를 쓰면서 값을 입력받음.
Scanner sc = new Scanner(System.in);
//next()를 사용하여 Space를 치기 전까지의 값을 입력받음
String str1 = sc.next();
//nextLine()을 사용하여 Enter()를 치기 전까지의 값을 입력받음
String str2 = sc.nextLine();
//nextInt()를 사용하여 Enter()를 치기 전까지 숫자값을 입력받음 (문자열 불가)
int scanInt = sc.nextInt();
System.out.println("str1 : " + str1);
System.out.println("str2 : " + str2);
System.out.println("scanInt : " + scanInt);
}
}
/*
입력값 : ABCDE FGHIJK
1234567890
str1 : ABCDE
str2 : FGHIJK
scanInt : 123456789
*/
이외에도 공부를 하다 알게되는 입출력 방법이 생기면 추후 추가 할 예정!
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java 기초] OOP와 Java 언어의 특징 (0) | 2024.09.26 |
---|---|
[ JAVA ] StringBuilder - 문자열 더하기 (0) | 2022.08.25 |
[ JAVA ] StringTokenizer()를 사용한 문자열 분리 (0) | 2022.08.21 |
[ JAVA ] 배열 정렬 (0) | 2022.08.18 |
[ JAVA ] 배열 (0) | 2022.08.18 |