Java 7 에 java.nio.file 패키지가 들어왔다.
java.io.File은 OS 에서 제공하는 다양한 파일시스템 특성들을 대부분 무시했기 때문에 쉘스크립트에서 $ cp src /path/to/dest 면 끝날 것을 꽤나 긴 코드를 쓰거나 commons-io FileUtils.copyFile 따위를 써야했었는데 이제는 java.nio.file.Files.[copy](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...))(Path src, Path dest, CopyOption option)으로 작업을 마칠 수 있다. java.nio.file.Files.[move](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...))의 CopyOption은 자바답지 않게 무려 ATOMIC_MOVE를 지원하는데 이는 Windows OS인 경우 MoveFileEx 콜이고, Linux/Solaris의 경우 rename(2) 콜이라, 동일 파티션 내의 큰 파일을 옮기더라도 광속이다.
Python의 open('.vimrc').readlines() 과 동일한 작업을 하는 Files.[readAllLines](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllLines(java.nio.file.Path, java.nio.charset.Charset))(Path, Charset) 도 반겨줄만하다.
이전에는 특정 디렉토리 밑의 모든 파일들에 대한 처리를 하기 위해 재귀호출을 하는 수고를 피할 수 없었는데 Files.[walkFileTree](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor))(Path, FileVisitor<T>)를 통해 아래와 같이 간단히 처리할 수 있다.
import java.nio.file.*;
import java.nio.file.attribute.*;
...
FileSystem fs = FileSystems.getDefault();
Files.walkFileTree(fs.getPath("./rust-0.1/"), new SimpleFileVisitor() {
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
System.out.println(file);
return FileVisitResult.CONTINUE;
}
});
마지막으로 언급하지 않을 수 없는 WatchService ! 파일시스템 이벤트들을 받을 수 있다. 예를들어 특정 디렉토리 속에 임의의 파일이 생기고 지워지는 등의 각종 이벤트들 말이다. 리눅스의 경우 inotify_add_watch(2) 와 poll(2) 콜이고, 솔라리스는 <port.h> 속의 각종 port_create, port_associate, port_send 등이며, 윈도우즈는 kernel32.dll의 ReadDirectoryChanges 콜이다. WatchService를 잘 활용한다면 개발환경 품질 향상을 꾀할 수 있다. 상상은 각자 알아서.
NIO.2 소개는 여기까지다.
Comments
2 thoughts shared
jude
ㅎㅎ 잘봤습니다.
Continue Reading
Discover more thoughts and insights
홈피 Trackback 일지 중지
제 홈피에 트랙백 거는 기능을 잠시 닫아두었습니다. (트랙백은 걸 수 있으나, 백앤드에 저장되지 않고 silently discard 합니다. 반자동으로 -\_- 스팸 트랙백 15만개를 지우고, 읽기 전용으로만
말투 관리 시스템이 필요하다
어지러우니 경어는 피하겠습니다. Personal 범주 만큼은 편한 말로 쓰는 게 맞는 것 같아서요 (@) 21살 처음 회사를 다닐 때는 1년동안 만든 프로그램들의 구성도/코드/클래스명 기억 못하는 게 거의
개발에 대한 귀인
요새 개발 관련 포스팅이 잦은 편입니다. (7)발이 아니라 Development! 문득 왜 개발에 다시 의욕이 생겼나 역추적을 해보았습니다. 2004년에 사업한다 찌질거리면서 에너지는 에너지대로 소진하고 제대로