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);
}
}
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 |