티스토리 뷰
파일 입력 스트림
- 파일 입력 스트림(FileInputStream) : 지정된 파일 이름으로부터 바이트 단위의 입력 스트림을 생성한다.
- 문자 입력 스트림 변환기(InputStreamReader) : FileInputStream을 통해 읽은 바이트 데이터를 문자 데이터로 변환한다. 여기서는 UTF-8 인코딩을 사용한다.
- 버퍼링된 문자 입력 스트림(BufferedReader) : InputStreamReader로부터 데이터를 효율적으로 읽기 위해 버퍼링을 추가한다. readLine() 메서드를 사용하여 파일의 각 줄을 편리하게 읽을 수 있다.
코드 예시1)
Seoul.txt, NewYork.txt 파일을 생성하고 내용을 넣음
FileReader(문자 기반 스트림) => 단 인코딩에 대한 단점이 존재한다.
파일 출력 스트림(문자 기반)
자바에서 텍스트 데이터를 파일에 쓰기 위해 사용되는 스트림이다.
FileWriter는 가장 일반적으로 사용되는 클래스이다.
문자 데이터를 파일에 쓸 때 사용되며, 이 클래스는 내부적으로 파일 시스템과 통신하여 데이터를 문자 단위로 파일에 쓰게 해준다. 이는 바이트 기반 스트림인 FileOutputStream과 대비되며, 텍스트 데이터를 처리할 때는 FileWriter가 더 적합하다.
FileOutputStream: 바이너리 데이터를 파일에 쓰기 적합(이미지, 비디오, 오디오 파일 쓰기, 직렬화 데이터 쓰기, 압축 파일 생성)
예시1)
BufferedWriter
자바에서 문자 출력 스트림에 대한 버퍼링을 제공하는 클래스
버퍼링은 데이터를 임시 저장공간인 버퍼에 모아둔 후, 일정량이 모이면 출력 장치로 한 번에 전송하는 기술로, 반복적인 I/O 작업에 따른 성능 저하를 줄여준다.
BufferedWriter를 사용하면 데이터를 라인 단위로 쉽게 작성할 수 있으며, 출력 성능을 향상시킬 수 있다.
예시2)
String 클래스의 split 메서드 활용
java의 split 메서드는 String 클래스의 메서드로, 문자열을 특정 패턴 또는 정규 표현식을 기준으로 분리하여 문자열 배열(String[ ])로 반환한다.
public String[] split(String regex)
public String[] split(String regex, int limit)
regex : 분리할 기준이 되는 정규 표현식이다.
limit : 결과 배열의 크기를 제한할 수 있는 옵션이다. 이 값을 설정하면 반환되는 배열의 최대 요소 수를 제한할 수 있다.
String[] words = line.split("\\s+"); // 공백을 기준으로 분리
String[] words = line.split("[,.\\s]+"); // 쉼표, 마침표, 공백을 구분자로 사용
String[] words = line.split("[^가-힣A-Za-z]+"); // 한글과 영문을 제외한 모든 문자를 구분자로 사용
// "[^가-힣A-Za-z]+"
^ (캐럿)
- 용도: 입력 문자열의 시작을 나타내는 앵커이다. 이 메타 문자는 패턴이 문자열의 시작 부분과 일치해야 함을 지정할 때 사용된다.
- 예시: ^abc : "abc"로 시작하는 문자열에만 일치한다. 예) "abcdef"는 매치되지만, "defabc"는 매치되지 않는다.
^[a-z]+ : 이 정규 표현식은 소문자 알파벳으로 시작하고, 하나 이상의 소문자가 연속해서 나타나는 문자열에 매치된다. 단, 대괄호 안에서 캐럿을 사용하면 "부정 문자 클래스"를 의미한다. |
+ (플러스)
- 용도: 바로 앞에 있는 요소가 하나 이상 존재할 경우에 일치한다. 즉, 앞의 표현이 최소 한 번 이상 반복되어야 할 때 사용한다.
- 예시: a+ : 'a'가 하나 이상 있는 모든 시퀀스에 일치한다. "a", "aa", "aaa" 등이 해당한다.
[...] 대괄호의 주요 의미와 사용
1. 문자 집합
대괄호 안에 나열된 문자들 중 하나와 매치된다.
예) [abc]는 a, b, 또는 c 중 하나와 매치된다.
2. 문자 범위
대괄호 안에 하이픈(-)을 사용하여 범위를 지정할 수 있다.
예) [a-z] : 소문자 알파벳 a에서 z까지의 모든 문자와 매치된다.
예) [A-Z] : 대문자 알파벳 A에서 Z까지의 모든 문자와 매치된다.
예) [0-9] : 숫자 0에서 9까지의 모든 문자와 매치된다.
3. 부정(not)
대괄호 안의 첫번째 문자로 ^(캐럿)을 사용하여 부정을 나타낼 수 있다. 이는 대괄호 안에 나열된 문자들을 제외한 모든 문자와 매치됨을 의미한다.
예) [^abc]는 a,b,c를 제외한 모든 문자와 매치된다.
[^가-힣A-Za-z]+의 의미
가-힣 : 한글 문자 범위(가에서 힣까지 모든 한글 문자)
A-Za-z : 모든 영문 대소문자
[^가-힣A-Za-z] : 한글 문자와 영문 대소문자를 제외한 모든 문자
+ : 한 번 이상 반복
=> 문자열 "안녕하세요! Hello123" 에서 [^가-힣A-Za-z]+ 패턴을 적용하면, "!" 와 "123" 이 매치된다.
예시)
파일에 임의의 긴 문장이 저장되어 있으며 파일 스트림을 활용해서 데이터를 읽고 코드상에서 프로그램 만들기
가장 많이 사용된 단어 찾기(공백 기중)
'Java' 카테고리의 다른 글
Java(고수준 스트림(Data/Object Stream)) (0) | 2024.05.22 |
---|---|
Java(File copy(문자/ 바이트 기반 입출력(ZIP 파일로 압축)) 및 로그와 파일 저장) (0) | 2024.05.21 |
Java(문자 기반 스트림) (0) | 2024.05.19 |
Java(파일 출력 스트림(바이트 기반) 및 파일 copy(바이트 기반 입출력)) (0) | 2024.05.19 |
Java(파일 입력 스트림(바이트 기반)) (0) | 2024.05.19 |