14_java_입출력(IO)

study/java · 2019. 11. 29. 08:36

@@@입출력(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