JAVA
JAVA) 자바 입출력 - Scanner, BufferedReader/BufferedWriter
starmk95
2020. 7. 13. 16:43
자바 입출력을 위해서는 Scanner 클래스가 사용하기 편리하다.
Scanner 사용 방법은 다음과 같다.
import java.util.Scanner;
Scanner sc = new Scanner(); // Scanner 객체 생성
sc.next() // 공백 기준으로 입력 받아오기
sc.nextLine() // 개행 기준으로 입력 받아오기
sc.nextInt() // 정수를 입력으로 받아오기
// 예
System.out.print("숫자를 입력하세요. : ")
int num = sc.nextInt()
System.out.print("문장을 써보세요. : ")
String temp = sc.nextLine()
Scanner 클래스는 사용하기는 간편하지만 입력에 있어 상대적으로 많은 시간이 소요된다는 단점을 가지고 있다.
System.out.print() 메소드를 통한 출력 또한 마찬가지이다.
따라서 입력 또는 출력의 양이 많은 코드에서 사용하기에는 바람직하지 않다.
시간을 줄이기 위해 Scanner 대신 BufferedReader/Writer 클래스를 사용하면 입출력에 소요되는 시간을 줄일 수 있다.
(입력은 적지만 출력이 많은 경우에는 StringBuilder를 사용해서 한 문자열로 만들어 한번에 출력하는 방법을 사용할 수도 있다)
각 클래스의 object 생성 방법은 이러하며, IO Exeption의 처리가 요구된다. (메소드에 throws IOException)
import java.io.*;
// BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 객체 생성
String s = bf.readLine(); // 개행 기준으로 한 줄 입력으로 받아오기
int num = Integer.parseInt(br.readLine()); // bufferedReader는 입력을 String형으로 받아온다.
br.close(); // 버퍼 닫기
// BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter((System.out))); // 객체 생성
bw.write("출력 버퍼에 담을 내용"); // 출력하고 싶은 내용 버퍼에 담기
bw.flush(); // 버퍼에 담긴 내용 콘솔에 출력하기 (이 처리를 해주어야 출력됨)
bw.close(); // 버퍼 닫기 (BufferedWriter 사용을 끝마쳤다면 반드시 버퍼를 닫아주어야함)
BufferedReader의 경우에 bw.readLine()을 통해 개행 기준 한 줄을 읽어올 수 있다.
BefferedWriter의 경우에 bw.write("출력할 문자")를 통해 출력할 내용을 버퍼에 담을 수 있고
(참고로 bw.write()에는 자동 개행 기능이 없다.)
bw.flush()를 통해 버퍼에 담긴 내용을 콘솔에 출력할 수 있다.
모든 입출력이 끝난 후에 bw.flush()와 br.close(), bw.close()를 호출해서 버퍼를 비우고 닫아줘야한다.