@@@입출력(IO)@@@(개념이 중요)
- 컴퓨터 내부 또는 외부장치와 프로그램간의 데이터를 ★스트림을 이용하여 주고 받는것
@FIle 클래스
- 파일 시스템의 파일을 표현하는 클래스
createNewFile() : 파일생성
mkdir() : 디렉토리 생성
mkdirs() : 경로상에 없는 모든 디렉터리 생성
@DAO(Data Access Object)
- DBMS에 접속하여 실제 데이터를 전송하거나 결과값을 전달받는데 사용되는 클래스
@바이트 기반 스트림
- 1byte 단위로 데이터를 입력/출력하는 스트림
@@FileInputStream
- 바이트 기반 파일 입력 스트림
-> 프로그램 외부 파일을 바이트 단위로 읽어드릴경우 사용
- FileInputStream 객체 생성시 바로 파일과 직접연결됨
- 만약 파일이 없다면 FileNotFoundException이 발생
@ InputStream.read()
- 파일의 데이터를 1바이트 읽어와서 반환
- 더이상 읽어올 데이터가 없으면 -1 반환
- read() 메소드의 반환형을 int이므로 실제 저장된 값과 다르게 표시됨
-> char로 형변환 해주면 해결
ex) System.out.print((char)fis.read());
- while문을 이용하여 read() 반환값이 -1인 경우까지 계속 읽어오기
-> file의 모든 내용을 읽어올 수 있음
# 한글이 깨지는 이유
- 한글은 2byte(유니코드)로 2byte가 한번에 해석되어야 한글로 인식됨
- 바이트 기반 스트림은 1바이트 단위로 입출력을 하기때문에 2byte한글데이터에 손상이 발생됨
@@FileOutputStream
- 프로그램 -> 파일(출력)
- 파일이 존재하지 않을 경우 자동으로 생성
- 파일이 존재하는 경우 기존 파일을 덮어씀
- ★ 덮어 쓰지 않고 이어 쓰기 하는 방법
-> FileOutPutStream 객체 생성 시 매개변수 마지막에 true 추가
@ FileOutPutStream.write()
- 프로그램에서 1바이트씩 외부로 출력
-> IOException을 발생시킬 가능성이 있음
- 정수로 값을 출력해도 해당 번호와 일치하는 아스키코드표의 문자가 출력됨
@@ FileReader@@
- 문자 기반 파일 입력 스트림
- 프로그램 <- 파일
@ FileReader
- FileReader 객체가 생성될 때 파일과 직접 연결됨
-> 연결될 파일이 없는 경우
FileNotFoundException 발생
- Reader.read()는 2바이트 문자 단위로 입력이됨 (읽어옴)
@ FileWriter
- 문자 기반 파일 출력 스트림
- 프로그램 -> 파일
@ Writer.write() : 2바이트 문자 단위로 외부로 출력
@@ Buffered @@
- Buffered 보조스트림
- 입출력에 관련된 데이터를 버퍼에 담아 두었따가
한꺼번에 입/출력하여 실행 성능을 향상 시킴
-> (입출력 횟수 감소로 인한 작업 속도 향상)
@BufferedWriter@
- 문자 기반 출력 보조 스트림
ex) bw = new BufferedWriter(new FileWriter("~~~.txt");
// 보조스트림 // 기반스트림
- BufferedWrite 생성 시 버퍼 크기를 지정하지 않으면 8192byte의 크기로 초기화됨
# bw.write()는 파일이 아닌 버퍼에 출력을 함
- 작업이 완료되거나 버퍼가 가득 찼을때 파일로 버퍼의 내용을 출력해야함
--> flush(), close()
bw.flush();
- flush() : 버퍼의 데이터를 파일로 출력
- close() : flush() + 자원반환
@keyBoardInput()
- 키보드 입력 동작 원리
키보드 입력 -> 키보드 입력 버퍼 -> 자바프로그램
(바이트) (바이트) (문자)
^
바이트->문자 변환 보조스트림
ex)
br = new BufferedReader(new InputStreamReader(System.in));
//문자스트림성능향상/바이트를문자(char)로/바이트기반키보드입력
@@@★ *.properties 파일 @@@
옵션정보, ★★ 데이터베이스 연결정보 ★★
키와 값이 `=` 연결
한글은 유니코드(Unicode)로 변환되어 저장
- K.V 모두 String 타입인 Map
- Properties는 무조건 K, V가 String이기 때문에 별도의 제네릭을 이용한 타입 제한이 필요없음
- prop도 데이터를 추가할때 put이 되지만 (상속받아서 오브젝트가 들어갈수 있음)
String이 아닐경우 오류가 발생하므로 setProperty(key,value)를 따로 사용
@ setProperty(key, value) : 값 추가
@ store(OutputStream os, String Comment)
-> Properties 객체에 담긴 K,V 값을 파일로 출력
@ load(FileInputStream file)
-> 파일에 있는 정보를 불러와 Properties 객체에 저장
-> 프로그램동작중 실시간으로 수정된 내용이 적용됨
'study > java' 카테고리의 다른 글
16_java_쓰레드(Thread)_사전지식, 왜? (0) | 2022.01.07 |
---|---|
15_java_복습_Generic (0) | 2022.01.05 |
13_java_Exception (0) | 2019.11.28 |
14_java_용어정리 (0) | 2019.11.13 |
13_java_Map (0) | 2019.11.12 |