NIO (NonBloking Input-Output)


- 일반 IO는 블럭화하여 블럭 풀리기 전까지 아무것도 수행못하던 단점을 극복한 API.



1. Path, URI

- 경로를 반환하는 클래스

- Path 타입의 클래스에 다음과 같은 메서드를 사용한다.


getFileName: 파일네임 반환


getParent: 부모 주소 반환


getRoot: 디렉토리 최상위 루트 반환 c:\


isAbsolute: 절대경로인지를 판단


toUri:  전체 경로 URI를 반환 


toAbsolutePath : 졀대경로를 반환


subpath: 몇번째 디렉토리부터 몇번째 디렉토리 값을 읽어올지 지정 가능


resolve: 경로 합치기



예제)


package com.model;


import java.net.URI;

import java.nio.file.Path;

import java.nio.file.Paths;


public class Ex01 {


public static void main(String[] args) {

Path path = Paths.get("c:\\temp\\ReadMe.txt"); // 절대경로

System.out.println("getFileName:" + path.getFileName()); // getFileName:파일네임 반환

System.out.println(path.getParent()); // getParent: 부모 주소 반환

System.out.println(path.getRoot()); // getRoot: 디렉토리 최상위 루트 반환 c:\

System.out.println(path.isAbsolute()); // isAbsolute: 절대경로인지를 판단

URI uri = path.toUri(); // toUri:  전체 경로 URI를 반환 

System.out.println(uri);

Path path2 = path.toAbsolutePath(); // toAbsolutePath : 졀대경로를 반환

System.out.println(path2);

Path path5 = Paths.get("c:\\temp\\aaa\\bbb\\ReadMe.txt"); 

Path path3 = path5.subpath(0, 3); 

// subpath: 몇번째 디렉토리부터 몇번째 디렉토리 값을 읽어올지 지정 가능

System.out.println(path3);

Path p1 = Paths.get("c:\\Temp\\aaa");

Path p2 = Paths.get("test.txt");

Path p3 = p1.resolve(p2); // resolve: 경로 합치기

System.out.println(p3);

}

}




결과)

getFileName:ReadMe.txt
c:\temp
c:\
true
file:///c:/temp/ReadMe.txt
c:\temp\ReadMe.txt
temp\aaa\bbb
c:\Temp\aaa\test.txt





2. Files

파일 존재 유무, 읽기쓰기실행 가능 여부 체크, 디렉토리 생성 등을 할 수 있는 클래스.


예제)


package com.model;


import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;


public class Ex02 {


public static void main(String[] args) {

// 파일 또는 디렉토리 존재 유무 확인

Path path = Paths.get("c:\\temp\\aaa");

System.out.println(Files.exists(path));

System.out.println(Files.isReadable(path)); // 읽기 가능 여부 체크

System.out.println(Files.isWritable(path)); // 쓰기 가능 여부 체크

System.out.println(Files.isExecutable(path)); // 실행 가능 여부 체크

Path newDir = Paths.get("c:\\temps\\ccc");

try {

Path dir = Files.createDirectories(newDir); // 디렉토리 생성. 예외처리 해야함

System.out.println(dir);

} catch (IOException e) {

e.printStackTrace();

}

Path newFile = Paths.get("c:\\temps\\test.txt");

Path file = null;

try {

file = Files.createFile(newFile); // 파일 생성.

} catch (IOException e) {e.printStackTrace();}

try {

Files.delete(newFile); // 파일 삭제

} catch (IOException e) {e.printStackTrace();}

try {

Files.delete(newDir); // 디렉토리 삭제

} catch (IOException e) {e.printStackTrace();}

}

}



결과) 


true

true

true

true

c:\temp\ccc


디렉토리와 파일이 생성된 뒤 삭제된다.


















'자바의 기초문법' 카테고리의 다른 글

성능을 고려한 자바 코딩 (Performance)  (0) 2016.05.20
자바의 Varargs (가변인자)  (0) 2016.05.19
람다 표현식 (Lambda Expression)  (0) 2016.05.18
import static  (0) 2016.05.18
싱글톤 패턴  (0) 2016.05.18
Posted by netyhobby
,