BufferedReader, BufferedWriter는 Buffer를 이용하여 데이터를 읽거나 쓰도록 구현된 클래스입니다.
데이터를 읽거나 쓸 때마다 I/O에 접근하지 않고 Buffer에 저장해둔 것을 읽거나 Buffer에 쓰기 때문에 I/O 작업 빈도가 적습니다. I/O에 접근하는 빈도가 적기 때문에 이로 인해 read/write 성능이 좋아집니다.
BufferedReader
다음과 같이 BufferedReader 객체를 생성할 수 있습니다. 보시는 것처럼 FileReader
객체로 데이터를 읽게되고, 이 FileReader에 Buffer를 적용하게 됩니다.
Buffer는 기본적으로 8kb
로 설정됩니다.
BufferedReader reader =
new BufferedReader(new FileReader("src/main/resources/input.txt"));
Buffer size를 변경하고 싶다면 두번째 인자로 byte를 입력하면 됩니다. 아래는 16kb
로 설정하는 예제입니다.
BufferedReader reader = new BufferedReader(
new FileReader("src/main/resources/input.txt"), 16384); // 16kb
데이터 출력
BufferedReader로부터 데이터를 읽으려면 readLine()
을 이용하면 됩니다.
readLine()
은 개행문자(\n
)를 기준으로 한 줄을 모두 읽어올 수 있습니다. null
이 리턴되면 파일의 끝에 도달했음을 의미하며 읽는 것을 중단하면 됩니다.
BufferedReader reader =
new BufferedReader(new FileReader("src/main/resources/input.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
Output:
Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.
사용자로부터 입력 받기
위의 예제들은 파일을 읽는 예제입니다.
사용자로부터 데이터를 받으려면 다음과 같이 객체를 생성하면 됩니다.
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
다음과 같이 사용자로부터 입력을 받는 동시에 출력하도록 구현할 수 있습니다.
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Output: " + line);
}
아래는 Console에서 12345
, abcde
를 입력했을 때 출력되는 내용입니다.
개행문자(\n
)를 기준으로 line을 구분하기 때문에 Enter를 입력해야 화면에 readline()
이 리턴됩니다.
12345
Output: 12345
abcde
Output: abcde
BufferedWriter
다음과 같이 어떤 File에 데이터를 쓰기위해 BufferedWriter 객체를 생성할 수 있습니다.
BufferedWriter writer = new BufferedWriter(
new FileWriter("src/main/resources/output.txt"));
Reader와 동일하게 기본 Buffer size는 8kb이며 size를 조정하고 싶다면 두번째 인자에 직접 입력하면 됩니다.
BufferedWriter writer = new BufferedWriter(
new FileWriter("src/main/resources/output.txt"), 16384); // 16kb
파일에 데이터 쓰기
BufferedWriter 객체를 생성하였다면, append()
로 데이터를 버퍼에 쓸 수 있습니다.
데이터를 버퍼에 쓴다고 파일에 저장되진 않습니다. 다음과 같이 flush()
를 호출하면 버퍼의 내용이 파일에 저장됩니다.
BufferedWriter writer = new BufferedWriter(new FileWriter("src/main/resources/output.txt"));
writer.append("Test\n");
writer.flush();
writer.append("Test\n");
writer.flush();
또는 다음과 같이 close()
를 호출하여 BufferedWriter의 FD를 닫으면서 버퍼의 내용을 파일에 쓰도록 할 수 있습니다.
close()
를 한번 호출하면 더 이상 데이터를 쓸 수 없습니다. flush()
를 사용하는
BufferedWriter writer = new BufferedWriter(new FileWriter("src/main/resources/output.txt"));
writer.append("Test\n");
writer.close();
flush()
, close()
를 호출하지 않아도 버퍼가 파일에 저장될 때가 있습니다.
append()
로 버퍼보다 큰 양의 데이터를 입력하면, 자동으로 flush()
가 호출되면서 버퍼의 데이터가 파일에 저장됩니다.
Console에 데이터 출력
위의 예제들은 BufferedWriter를 이용하여 파일에 데이터를 쓰는 예제입니다.
다음과 같이 Console 화면에 데이터를 출력하도록 만들 수도 있습니다.
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.append("Test\n");
writer.append("BufferedWriter\n");
writer.close();
다음은 위의 코드를 실행했을 때 화면에 출력되는 내용입니다.
Test
BufferedWriter
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기