얏호~
어느덧 마지막 6주차입니다~~
이제 혼공단 마지막 미션이네요~
14 | 입출력 스트림
길고도 짧게 느껴졌던 6주차(여름방학 포함 7주차) 였습니다!
혼자 공부하는 자바를 공부하면서 책 한 권을 끝까지 볼 수 있어서 너무나도 좋은 기회였습니다~!
1주차 학습 스케줄 계획만큼 성실하게 수행하진 못했지만
그래도 끝까지 포기하지 않고 참여해서 뿌듯합니다ㅎㅎㅎ
다음 기회가 있다면 또 참여하고 싶은 값진 경험이었습니다~!
마지막 미션입니다~!
[기본 미션] 입출력 스트림 요약 정리하여 포스팅하기
입출력 스트림
자바에서 데이터는 스트림을 통해 입출력된다.
스트림은 단일 방향으로 연속적 흐름이며, 데이터는 출발지에서 도착지로 흘러간다.
입출력 스트림의 종류
- 바이트 기반 스트림 : 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용
- 문자 기반 스트림 : 문자 데이터를 읽고 출력할 때 사용
바이트 기반 스트림
최상위 클래스 : 입력 스트림 _ InputStream, 출력 스트림 _ OutputStream
하위 클래스 : Ex) 이미지와 같은 바이너리 파일의 입출력 스트림 클래스, FileInputStream/FileOutputStream
바이트 출력 스트림: OutputStream
OutputStream : 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스
- 모든 기반 출력 스트림 클래스는 OutputStream 클래스를 상속받아서 만들어짐
- FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream
- write(int b) 메소드 : 매개 변수로 주어지는 int(4byte)에서 끝 1byte만 출력 스트림으로 보냄
- write(byte[] b) 메소드 : 매개값으로 주어진 배열의 모든 바이트를 출력 스트림으로 보냄
- write(byte[] b, int off, int len) 메소드 : b[off]부터 len 개의 바이트를 출력 스트림으로 보냄
바이트 입력 스트림: InputStream
InputStream : 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스
- 모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속받아서 만들어짐
- FileInputStream, BufferedInputStream, DataInputStream
- read() 메소드 : 입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴
- read(byte[] b) 메소드 : 입력 스트림으로부터 매개값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장, 읽은 바이트 수를 리턴.
- read(byte[] b, int off, int len) 메소드 : 입력 스트림으로부터 len 개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장, 읽은 바이트 수인 len 개를 리턴
문자 출력 스트림: Writer
Writer : 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스
- 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속받아서 만들어짐
- FileWriter, BufferedWriter, PrintWriter, OutputStreamWriter
- write(int c) 메소드 : 매개 변수로 주어지는 int(4byte)에서 끝 2byte(1개의 문자)만 출력 스트림으로 보냄
- write(char[] cbuf) 메소드 : 매개값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냄
- write(char[] cbuf, int off, int len) 메소드 : c[off]부터 len개의 문자를 출력 스트림으로 보냄
- write(String str) 메소드 : 문자열 전체를 출력 스트림으로 보냄
- write(String str, int off, int len) 메소드 : 주어진 문자열 off 순번부터 len 개까지의 문자를 보냄
문자 입력 스트림: Reader
Reader : 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스
- 모든 문자 기반 입력 스트림은 Reader 클래스를 상속받아서 만들어짐
- FileReader, BufferedReader, InputStreamReader
- read() 메소드 ; 입력 스트림으로부터 1개의 문자(2byte)를 읽고 int(4byte) 타입으로 리턴
- read(char[] cbuf) 메소드 : 입력 스트림으로부터 매개값으로 주어진 문자 배열의 길이만큼 문자를 읽고 배열에 저장
- read(char[] cbuf, int off, int len) 메소드 : 입력 스트림으로부터 len개의 문자만큼 읽고 매개값으로 주어진 문자 배열에서 cbuf[off]부터 len개까지 저장
[선택 미션] p. 632 문제 2번 풀고, 풀이 과정 설명하기
조건
FileReader와 BufferedReader를 이용해서 source.txt 내용읽기
source.txt 내용을 모니터로 출력하는 프로그램
source.txt 파일 생성하기
접근성이 좋도록 D 드라이브에 저장했습니다.
D:\source.txt
실행코드
package sec02.verify.exam02;
import java.io.BufferedReader;
import java.io.FileReader;
public class AddLineNumberExample {
//FileReader와 BufferedReader를이용해서 source.txt 내용읽기
//추가 코드 대략 10줄로 예상
//source.txt 내용을 모니터로 출력하는 프로그램
public static void main(String[] args) throws Exception {
//throws Exception: 예외 처리를 위한 코드, 해당 코드 블록{}에서 발생하는 예외를 상위 호출자에게 전달
String filePath = "src/sec02/verify/exam02/AddLineNumberExample.java";
//filePath : 읽어올 파일의 경로를 변수에 저장,
//상대 경로로 저장, 해당 코드가 위치한 디렉토리의 경로를 나타냄
BufferedReader reader = new BufferedReader(
new FileReader("D:\\source.txt")
//불러오는 파일 경로 작성
);
//파일을 읽기 위한 reader 객체 생성
//FileReader : 파일을 문자 단위로 읽어오는 역할
//BufferedReader : 읽어온 데이터를 버퍼링하여 효율적인 입출력을 제공
String str;
//읽어온 한 줄의 문자열을 저장할 변수 str 선언
while((str = reader.readLine()) != null) {
//파일을 줄 단위로 읽어오는 루프를 시작
//reader.readLine() : 파일에서 한 줄씩 읽어오는 메소드
//읽어온 내용을 str에 저장
//파일의 끝에 도달하면 null을 반환
//파일의 끝에 도달할 때까지 루프가 실행됨
System.out.println(str);
//읽어온 한 줄의 내용을 담은 str을 화면에 출력
}
reader.close();
//파일읽기가 끝나면 reader를 닫음
}
}
실행결과
source.txt의 내용이 출력되었습니다~!
너무나도 늦게 과제를 수행했는데요
그래도 혼공단 덕분에 책 한권을 끝까지 살펴볼 수 있었고,
전체적인 내용 파악이 가능했습니다.
다른 분들이 올리는 게시글을 보면서
'이렇게도 작성할 수 있구나, 이렇게 접근할 수도 있구나'
하며 새로운 공부방법 등을 깨달을 수 있었습니다.
과제를 포기할까 하다가도 늦어져도 차근차근 올리는 분들 덕분에 의지를 다시잡고 수행할 수 있었구요.
덕분에 6주차 과제를 모두 참여할 수 있었네요.
공부를 하며, 과제를 수행하면서 성취감을 느꼈고,
내가 해낼 수 있는 사람이구나라고 생각할 수 있게된 값진 경험이었습니다.
다음에 또 기회가 된다면
그때는 다른 혼공 과목으로 참여하고 싶네요.
즐거웠습니다~!
혼공단 참여하시는 분들 원하는 미래를 이루시길 바랍니다.
감사합니다~!!
'[혼공단 10기] 자바' 카테고리의 다른 글
[혼공단 10기] 자바 5주차 미션! (0) | 2023.08.20 |
---|---|
[혼공단 10기] 자바 4주차 미션! (0) | 2023.07.30 |
[혼공단 10기] 자바 3주차 미션! (0) | 2023.07.24 |
[혼공단 10기] 자바 2주차 미션! (0) | 2023.07.16 |
[혼공단 10기] 자바 1주차 미션! (0) | 2023.07.09 |