▶ DAO(Data Access Object)
- 데이터가 보관되어 있는 공간과 직접 접근해서 데이터를 입, 출력하는 클래스
▶ 바이트 기반 스트림
- 외부매체를 지정하고 그 외부매체와 직접적으로 연결되는 1byte단위의 통로를 만들겠다.
- 바이트 스트림 : 1byte단위로만 입출력할 수 있는 좁은 통로(xxxInputStream/xxxOutputStream)
- 기반 스트림 : 외부매체와 직접적으로 연결되는 통로
■ InputStream
xxxInputStream : xxx매체로부터 데이터를 "입력"받는 통로(외부매체에 있는 데이터를 가지고 오겠다. 읽어드리겠다.)
■ OutputStream
xxxOutputStream : xxx매체로부터 데이터를 "출력"하는 통로(외부매체에 데이터를 내보내겠다. 쓰겠다.)
■ 출력해보기 (프로그램 => 외부매체(파일))
출력 : 프로그램 내의 데이터를 파일로 내보내기 (즉, 파일에 기록하겠다.)
FileOutputStream : "파일"로 데이터를 1byte단위로 출력하는 스트림
FileOutputStream을 이용해서 출력해보자.
public void fileSave() {
FileOutputStream fos = null; // 변수 선언 및 null로 초기화
try {
// fos = new FileOutputStream("a_byte.txt"); // 객체 생성 => 덮어쓰기
fos = new FileOutputStream("a_byte.txt", true); // 객체 생성 => 이어쓰기
fos.write(97);
fos.write('b');
fos.write('정'); // 한글은 2byte이기 때문에 깨져서 저장
byte[] bArr = {99, 100, 101};
fos.write(bArr);
fos.write(bArr, 1, 2); // bArr배열에서 1번 인덱스에서부터 2개를 넣어줘라
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1. FileOutputStream 객체 생성
매개변수로 지정한 파일과 직접 연결되는 통로를 만들어 준다.
해당 파일이 존재하지 않으면 해당 파일이 "생성"되면서 통로가 연결되며 존재하는 파일이면 그냥 통로가 연결된다.
두번째 매개변수에 true 작성시 기존에 해당 파일이 있을 경우 이어서 작성하며 true 미작성시 or 명시적 false작성시 항상 덮어씌워진다.
2. 연결통로로 데이터를 출력해주기 : write() 메서드 사용
1byte 범위 : -128 ~ 127까지의 숫자(단, 파일에 기록되기를 해당 숫자의 고유한 '문자'가 기록된다.)
음수는 작성이 안된다. 아스키 코드표에 음수가 존재하지 않기 때문에 0 ~ 127까지의 숫자만 기록 가능하다.
3. 스트림을 다 이용했으면 자원 반납해주기(반드시) : close() 메서드 사용
위에서 혹시 예외가 발생했을경우 실행이 안될 수 있기 때문에 finally를 사용해준다.
● finally {}
어떤 예외가 발생하든간에 반드시 실행할 구문을 작성하는 블럭(항상 실행된다.)
■ 입력해보기 (프로그램 <= 외부매체(파일))
입력 : 파일로부터 데이터를 가지고 오겠다.
FileInputStream : 파일로부터 데이터를 1byte 단위로 입력받는 스트림
FileInputStream을 이용해서 입력해보자.
public void fileRead() {
FileInputStream fis = null;
try {
fis = new FileInputStream("a_byte.txt");
// 콘솔창에 파일으 첫 글자부터 마지막글자까지 출력해보기.
int value = 0;
while ((value = fis.read()) != -1) {
System.out.println((char)value);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1. FileInputStream 객체 생성
파일과 연결되는 스트림을 열어준다.
이때 반드시 존재하는 파일로 제시해야 한다.
2. 통로를 통해 데이터 입력받기 read() 사용
1byte단위로만 하나씩 읽어오며 파일 끝을 만나는 순간 read함수는 -1을 반환해준다.
'JAVA' 카테고리의 다른 글
JAVA (27) 보조 스트림 (0) | 2023.04.15 |
---|---|
JAVA (26) FileCharDao (0) | 2023.04.15 |
JAVA (24) 스트림 (0) | 2023.04.13 |
JAVA (23) File (0) | 2023.04.13 |
JAVA (22) CustomException (0) | 2023.04.12 |