20.12.17

민주·2021년 1월 17일
  1. File writer

    - 12 : 1) 파일을 쓸 위치를 지정한다
    - 15 : 2) 파일이 없는 경우 생성(file.createNewFile())
    - 20 : 3) 스트림 준비
    - 두번째 매개변수에 아무것도 쓰지 않거나 false를 하면 파일쓰기를 여러 번 했을 때 덮어쓰기가 된다
    - FileWriter의 두번째 매개변수에 true를 사용하면 덮어쓰기가 아닌 이어쓰기가 된다.
    - 21 : 4) 쓰기작업
    - \r\n은 줄바꿈이다
    - 29 : 5) flush()와 close()로 자원정리

    - 스캐너로 내용 입력 받고 파일로 내보내기
    1. 내보낼 파일 위치 설정
    2. 시스템에서 내용을 불러올 스캐너 준비
    3. 파일로 내보낼 FileWriter준비
    4. Scanner로 읽어온 내용을 파일로 내보낸다
    5. 사용한 자원을 닫는다

  2. 보조스트림
    1. 문자기반 보조 스트림
    - 보조스트림은 다른스트림과 연결되어 추가 기능을 제공해주는 스트림이다.
    - 보조스트림은 계속해서 붙일 수 있다.

    1. 읽어올 경로와 내보낼 경로지정
    2. InputStream과 OutputStream준비
    - 파일에 특화된 FileInputStream과 FileOutputStream로 준비한다
    - FileInputStream과 FileOutputStream은 파일을 file.createNewFile() 해주지 않아도 없는 파일을 자동으로 생성한다
    3. 보조스트림 준비
    - 읽어오고 내보낼 때 한글이 깨질수도 있으므로 사용해준다.
    - 보조스트림은 매개변수에 스트림 변수를 넣어준다.
    - UTF-8로 인코딩 하겠다는 의미이다.
    4. 읽어와서 쓰기
    - 성능향상 안한 버전
    - EOF( End Of File ) : -1로 나타나며 파일에서 더 이상 읽을 것이 없거나 오류 일때 반환
    5. 자원정리
    - 모든 OutputStream flush() : 주 스트림 , 보조스트림 모두
    - 모든 Stream close() : 주 스트림, 보조스트림 모두

  3. 성능향상 보조 스트림

    - 보조스트림 에서는 성능 향상을 위한 Buffer를 제공한다
    - buffer는 전송받은 내용들을 모아서 한꺼번에 전송할수 있도록 해주는 임시저장소이다
    - 예를들어 동영상에서 하얀부분이 버퍼링이고 끊김없이 재생하기 위한것이다.

    - 시간체크할 클래스
    - currentTimeMillis() : 현재시간

    - 버퍼를 사용하지 않았을 때
    1. 파일 위치 지정과 스트림 준비
    2. 읽어오기 전에 측정시작( 현재 시간 측정 )
    3. 읽어오고 쓰기 -> 성능향상버전
    - 24 : 비워주는 역할
    4. 측정 : timeStop = end-start
    5. 자원 정리
    6.


- 버퍼를 사용했을 때
1. 파일 위치 지정과 스트림 준비
2. 보조스트림 준비
- BufferedInputStream과 BufferedOutputStream
3. 읽어오기 전에 측정시작( 현재 시간 측정 )
4. 읽어오고 쓰기 -> 성능향상버전
- 24 : 비워주는 역할
5. 측정 : timeStop = end-start
6. 자원 정리 : 보조스트림까지 다 해줘야한다.
7.

- try-catch문에 넣어주면 close를 안해줘도 된다

  1. 기본타입 입출력 보조스트림
    - 바이트 기반 스트림은 기본타입(int, boolean, long, double..) 데이터를 전송 할 수 없다.
    - 그래서 DataInputStream, DataOutputStream을 이용하면 가능하다

    - 내보내기 -> try-with-resource 버전
    1. 내보낼 파일 위치 설정 + 스트림 준비
    - dat -> 자바에서 읽을수있는 파일 형태
    2. 보조스트림 준비
    3. 데이터 쓰기
    4. 자원 정리

    - 파일 읽어오기
    1. 불러올 파일 위치 설정 + 스트림 준비
    2. 보조스트림 생성
    3. 데이터 읽어오기
    - 파일 내보낼때 쓴 순서대로 읽어야 한다.( 순서가 바뀌면 에러난다 )
    - 그래서 쓴 사람이 읽어오는게 안전하다.
    4. 자원정리
    - 최종 보조스트림만 닫아줘도 되는데 안정상으로 의심이 된다면 하나하나 닫아줘도 된다.

  2. 객체 입출력 보조 스트림
    - Data로는 모든 타입을 보내긴 무리가 있다.
    - 그래서 java에서 최상위 객체인 Object를 다룰 수 있는 보조 스트림이 있다.
    - 객체, 배열, 컬렉션 등 다양한 데이터가 들어 갈 수 있다.
    - Class 객체의 경우는 직렬화(serialize) 하지 않으면 전달 되지 않는다.
    - 직렬화 해줄려면 Serializable라는 인터페이스를 구현받아야 한다.
    - Serializable의 역할 : 퍼즐의 원래 밑판 , 원래 그림
    -
    - 직렬화 -> 자바 시스템 내부에서 사용되는 Object를 외부 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환 시키는 기술.( Object 덩어리를 조각낸다 )
    - 역직렬화 -> byte로 변환된 데이터를 원래대로 Object로 변환시키는 기술 ( 조각을 다시 합침 )

    - 내보내기
    1. 내보낼 위치 선정 + 스트림 준비
    2. 보조 스트림 준비
    3. 데이터 쓰기
    - ObjectOutputStream에는 객체, 배열, 컬렉션 등 다양한 테이터 타입이 들어 갈 수 있다.
    - 26 처럼 기본 데이터 타입도 들어 갈 수 있다.
    - 여기서 Sample은 Serializable라는 인터페이스를 구현받은 클래스이다
    4. 자원 정리
    - 최종 보조스트림만 닫아주었다.

    - 읽어오기
    1. 읽어올 파일 위치 지정 + 스트림준 비
    2. 보조스트림 준비
    3. 쓴 순서에 맞춰서 읽어오기( 순서 틀리면 에러남 )
    - Object로 읽어 온건 캐스팅을 해주어야 한다.
    4. 자원 정리
    5.

  3. properties
    - properties는 map Interface을 상속 받았기 때문에 Map의 속성인 Key와 Value를 갖는다
    - properties 파일은 주로 java project안에서 객체 형태로 읽고 쓸 수 있으면서 외부에서도 사용자가 읽고 쓸 수 있다
    - properties는 확장자가 properties로 되어 있어서 한글쓰면 깨진다

    - properties 파일 쓰고 저장하는 순서
    1. properties 객체를 생성한다
    - String, String으로 고정되어 있어서 제너릭 사용 안해도 된다
    2. 값을 추가한다
    3. 외부에 저장한다
    - 파일 경로 지정 + 주스트림 준비
    - 보조스트림 준비
    - prop.store(저장할스트림, 주석)로 저장하는데 bos가 store의 매개변수 들어갈때 데이터가 모두 들어가므로 flush()를 안해줘도 된다.
    4. 자원 정리
    5.
    - 지정한 경로에 파일이 만들어 진 것을 확인할 수 있다.

    - properties 파일 읽어오기 순서
    1. Properties 객체 생성
    2. 불러올 파일 위치 지정
    3. 주스트림과 보조스트림 추가
    4. 읽어오기 : prop.load();
    5. 자원 정리

  4. Java NIO

    1. NIO 와 IO의 차이점
    - New Input/Output의 약자이다.


    - I/O방식과 Buffer방식만 잘 알아 두기
    - NIO를 사용하면 코드가 줄고 편하지만 실제로는 자바1.8버전 이상부터 되기 하고 안정성을 위해 IO를 더 사용한다.

    2. File System 다루기


    - Java IO 에서는 파일 경로, 정보, 각종 처리 등을 File객체를 통해 수행했다
    - NIO 에서는 이런 기능을 각각 다 클래스로 전문화 하였다.

    - 12 : 특정 경로의 파일을 가져옴
    - path.getFileName() : 특정 경로의 파일 이름
    - path.getParent().getFileName() : 특정 경로의 파일의 부모 폴더 이름
    - path.getRoot() : 최상위폴더
    - path.getNameCount() : 경로단계 수

    - 특정 파일 다루기
    - 13 : 이 폴더가 존재하지 않으면~
    - Files.createDirectories() : 폴더 생성
    - 기존 IO의 File클래스에서는 mkdirs(폴더 경로 생성)으로 사용
    - 19 : 이 파일이 존재하지 않으면~
    - Files.createFile() : 파일 생성

    3. File handling


    - IO에서는 파일을 읽고 쓰기 위해서 Stream을 반드시 생성해야했다.
    - NIO에서는 Channel을 활용하거나 Files클래스의 method로 간단히 처리가 가능하다

    - NIO에서 파일 쓰기
    - IO에서는 순서가 경로지정 -> 스트림과 보조스트림준비 -> 쓰기 -> 자원정리였다
    - NIO에서는 스트림을 생성하지 않아도 되기 때문에 스트림, 보조스트림 준비와 자원정리를 안해줘도 된다
    - 18 : path를 이용한 경로지정
    - 20 ~ 22 : Files를 이용한 파일 생성
    - StandardOpenOption
    - APPEND : 이어쓰기
    - CREATE : 파일이 없을 경우 새로 생성
    - CREATE_NEW : 이미 파일이 존재하여도 새로 파일을 생성
    - READ : 읽기모드
    - WRITE : 쓰기모드

    - 이 처럼 옵션을 지정해 바꿀수도 있다.


- NIO에서 파일 읽기
- 쓰기와 마찬가지고 NIO에서는 스트림을 안만들어도 돼서 과정이 줄어든다
- 17 : 리스트 형태로 한줄씩 읽어온다

- NIO에서 파일 읽어오고 쓰기
- IO에서 했던 스트림과 보조스트림 준비 , 자원정리는 스트림을 사용하지 않기때문에 안해줘도 된다
- 읽기와 쓰기도 copy로 가능
- StandardCopyOption
- REPLACE_EXISTING : 이미 있는 파일이면 덮어쓴다.( 이 옵션 없이 중복파일 만나면 Exception )
- COPY_ATTRIBUTES : 파일의 권한, 읽기 전용 등의 속성 까지도 복사

profile
개발이좋아요

0개의 댓글