NIO 파일 및 디렉터리

이은영·2022년 6월 21일
0

자바

목록 보기
4/5

NIO(New Input/Output)

기존 java.io API와 다른 새로운 입출력 API
네트워크 지원 강화된 NIO.2 API 추가

IO 스트림 : 스트림(Stream) 기반

⭐️ 입력 스트림과 출력 스트림으로 구분되어 별도 생성
Ex) 하나의 파일에서 데이터를 읽고 저장하는 작업을 모두 해야한다면 FileInputStream과 FileOutputStream을 별도로 생성해야 함

  • 입력 스트림 : 데이터 읽기
  • 출력 스트림 : 데이터 출력

넌버퍼(non-buffer)
IO에서는 1바이트씩 읽고 출력 <- 느림, 속도를 위해 보조 스트림인BufferedInputStream, BufferedOutputStream를 사용해 버퍼를 이용하기도 함. 스트림으로부터 입력된 전체 ⭐️ 데이터를 별도로 저장해야 저장 후 입력 데이터의 위치 이동해가면서 자유롭게 이용 가능

블로킹(blocking)

  • 입력 스트림의 read()메소드 호출 : 데이터 입력 전까지 스레드는 블로킹(대기상태)
  • 출력 스트림의 wirte()메소드 호출 : 데이터 출력 전까지 스레드는 블로킹
    ⭐️ 스레드(프로세스의 한조각) 블로킹 : 다른 일을 할 수가 없고,interrupt(어떤 일을 중단시키는 것)해 블로킹 빠져나올 수도 없음. 블로킹을 빠져 나오는 유일한 방법은 스트림을 닫는 것

NIO : 채널(Channel)기반

⭐️ 양방향으로 입출력이 가능하므로 하나만 생성
Ex) 하나의 파일에서 데이터를 읽고 저장하는 작업을 모두 해야 한다면 FileChannel 하나만 생성하면 됨

버퍼(buffer)
기본적으로 버퍼 사용해 입출력 <- 성능 좋음, 읽은 데이터를 무조건 버퍼(buffer: 메모리 저장소)에 저장 ⭐️ 데이터를 별도의 공간에 저장할 필요없이 버퍼 내에서 데이터 위치 이동해 가면 필요한 부분만 읽고 쓸 수 있음

블로킹,넌블로킹
NIO블로킹은 스레드를 interrupt함으로써 뺘져나올 수 있음
NIO는 넌블로킹 지원 : 입출력 작업 시 스레드가 블로킹되지 않음
준비 완료된 채널을 선택할 수 있음

파일과 디렉터리

파일

IO : 파일의 속성 정보를 읽기 위해 File 클래스 제공
NIO : 다양한 파일의 속성정보를 제공해주는 클래스와 인터페이스를 java.nio.file, java.nio.file.attribute 패키지에서 제공

경로

Path path = Paths.get(String first, String...moare)
//Path의 구현 객체를 얻기 위해서는 java.nio.file.Paths클래스의 정적 메소드인 get()메소드를 호출함
Path path = Paths.get(URI uri);

get() 메소드의 매개값

  • 파일의 경로 : 절대경로, 상대경로 모두 가능
    1. 전체 경로를 한꺼번에 문자열로 지정 가능
    2. 상위 디렉터리와 하위 디렉터리를 나열해 문자열로 지정해 분리도 가능
    3. URI객체도 지정 가능

절대경로 지정

Path path = Paths.get("C:/Temp/dir/file.txt"); 
					//index 0 / 1 / 2
Path path = Paths.get("C:/Temp/dir", "file.txt");
Path path = Paths.get("C:", "Temp", "dir","file.txt");

상대경로 지정 (현재 위치가 "C:/Temp"일 경우) 지정

Path path = Paths.get("dir/file.txt"); 
Path path = Paths.get("./dir/file.txt");
Path path = Paths.get("../dir2/file.txt");
.은 나 자신 , ..은 부모

java.nio.file.Path 인터페이스 메소드

파일 시스템

java.nio.file.FileStystem 인터페이스 사용

FileSystem fileSystem = FileSystems.getDefault();
//FileSystem의 구현 객체를 얻기 위해서는 java.nio.file.FileSystems클래스의 정적 메소드인 getDefualt()메로드를 호출함

java.nio.file.FileStystem 인터페이스 메소드

java.nio.file.FileStore 드라이버를 나타내는 클래스, 제공 메소드

java.nio.file.Files 클래스의 제공 메소드
파일 속성 읽기 및 파일, 디렉터리 생성/삭제

  • 파일과 디렉터리의 생성 및 삭제, 이들의 속성을 읽는 메소드 제공
  • 속성 : 숨김 여부, 디렉터리 여부, 크기, 소유자..

와치 서비스(WatchService)

파일 변경 통지 메커니즘
디렉터리 내부에서 파일 생성,삭제,수정 등의 내용 변화를 감시하는데 사용됨
Ex) 에디터에서 파일을 편집하고 있을 때,에디터 바깥에서 파일 내용을 수정하게 되면 파일 내용이 변경 됐으니 파일을 다시 불러올 것인지 묻는 대화상지를 띄우는 것

profile
성장중인 개발자 (머리속의 생각을 글로 옮기는 연습을 하고 있습니다.)

0개의 댓글