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
MSN 메신져
업무시간에는 사용하지 않기로 했습니다. 워낙 산만해서.. 흐흐 며칠동안 MSN 없이 살았더니 아주 좋습니다. 뭐 몇년간 거의 손대지 못했지만, JMSN 개발도 이제 그만하게 될 듯 싶습니다. 무엇이든 너무
야심만만 보고나서, 잡념 릴레이
요새 생활패턴이 05시 수면 13시 기상으로 바뀌어있어서, 깊은 밤에 블로깅을 한다. 01시쯤에 자려고 마음먹지만, 그렇게 되는 경우가 많지는 않다. 수면에 대한 열정 부족인가보다. 에이. -\_- 오늘도 역시
100일 만의 PT 복귀, 턱걸이의 위력
지난주 목요일부터 PT 수업을 다시 받기 시작했다. 거의 100일 만에 받는 PT여서 그랬는지 트레이너가 "다 리셋됐네요? ㅋㅋ" 했는데 이날 가슴 운동해서 생긴 지연성 근육통(DOMS)은 화요일 저녁까지