스트림
다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
- 파일로부터 입력을 받는 스트림을 입력스트림,
- 출력을 보내는 스트림을 출력스트림
- 바이너리 형태로 데이터를 입출력하는 스트림을 이진스트림,
- 문자형태로 입출력하는 스트림을 텍스트스트림
스트림만들기
중간연산(여러번) -> 최종연산(한번)
=> (순서대로) 중복제거, 5개 자르기, 정렬
=> [하나씩 꺼내서 출력하기]
- 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않음 (원본은 그대로)
- 스트림은 Iterator처럼 일회용이다. (필요하면 다시 스트림 생성)
- 최종 연산 전까지 중간연산이 수행되지 않는다. (지연된 연산)
- 스트림은 작업을 내부 반복으로 처리한다.
- 스트림의 작업을 병렬로 처리 (병렬스트림)
- 파일을 라인(줄바꿈) 단위로 읽어서 사용
입출력(I/O)
FileReader & FileWriter
- 문자기반의 파일 입출력. 텍스트 파일의 입출력에 사용
BufferedReader & BufferedWriter
- 입출력 효율을 높이기 위해 버퍼(char[])를 사용하는 보조 스트림
- 라인(line)단위의 입출력이 편리하다.
InputStreamReader & OutputStreamWriter
- 바이트기반 스트림을 문자기반 스트림 처럼 쓸 수 있게 해줌
- 인코딩(encoding)을 변환하여 입출력을 할 수 있게 해줌
이클립스에서 파일생성, 출력하기
우선 파일을 생성하기 이전에 경로를 설정하였다.
filetest라는 폴더를 생성 (기존 프로젝트 바로 하위에 지정하였음)
파일이 있는 경우 파일의 데이터를 출력
파일이 없는 경우 파일을 생성
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.stream.Stream;
public class FileExam {
public static void main(String[] args) {
FileExam fe = new FileExam();
try {
fe.createFile();
} catch (FileNotFoundException e) {
// 파일을 찾을 수 없을 경우 예외처리
System.out.println("해당 파일을 찾을 수 없음");
} catch (IOException e) {
// 입출력 예외처리
}
}
// 파일 생성하기
public void createFile() throws FileNotFoundException,IOException {
File file = new File("filetest/test.txt");
if(file.exists()) {
System.out.println(file.getName() + "파일이 존재합니다.");
FileReader fr = new FileReader(file); // 해당 파일을 찾아보고 없을 경우 예외처리
BufferedReader br = new BufferedReader(fr);
Stream<String> lines = br.lines();
lines.forEach(System.out::println);
br.close();
fr.close();
} else {
System.out.println("파일이 존재하지 않습니다.");
System.out.println("파일을 생성합니다.");
file.createNewFile();
}
}
}
[출력]
파일이 존재하지 않습니다.
파일을 생성합니다.
이클립스에서 바로 변화가 나타나지 않는데,
이 경우에 해당 폴더에서 [마우스 오른쪽버튼] -> [Refresh] 를 눌러야 한다.


해당 파일을 열어보자
해당 파일을 이클립스에서 쉽게 파일을 찾는 방법은
[해당파일 우클릭] -> [Show In] -> [System Explorer] 클릭
해당 파일이 있는 파일 탐색기를 열어준다.
해당 파일에 열어 글을 적고 저장
다시 컴파일을 하면
처음에 파일이 없었을 경우 else 구문을 돌았다면
현재는 파일이 있으므로 if 구문을 동작할 것이다.
잘 동작하는 것을 볼 수 있다.
'Java' 카테고리의 다른 글
자바 스택과 큐(Stack & Queue) 그리고 LIFO, FIFO (0) | 2022.01.16 |
---|---|
자바 컬렉션프레임워크 LinkedList의 특징 (0) | 2022.01.15 |
자바 컬렉션프레임워크 HashMap, HashTable 순서, 중복 알아보기 (0) | 2022.01.12 |
자바 컬렉션 프레임워크(List, Set, Map) (0) | 2022.01.10 |
자바 Scanner 대신 bufferedReader를 사용하는 이유 ( BufferedWriter, StringTokenizer 사용법) (0) | 2022.01.10 |
댓글