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
체지방 9kg 감량과 함께 찾아온 변화들
다이어트 10주차 중간에 회사도 관두고 풀타임으로 하니 아주 성공적이다. 체지방 9kg 빠지고 골격근 3kg 늘었다. 매주 600그램씩 체중을 6-7kg 감량했지만 공복혈당은 변화가 거의 없어 시시하다. 식단
초자아
문득 나의 한없는 방황이 나의 초자아 때문이라는 생각이 들었다. 근 30년(계란 한 판을 채우려면 아직 노른자 한방울이 남았다) 간의 내 사고/행동 패턴으로 봤을 때 이 패턴을 끊임없이 훈련하고 강화하여 완성체를
끄적임 4
오랜만에 20시간 연속 수면을 취했다. 조금전 눈 비비고 일어나 식빵에 계란 씌워먹고 있다. 주말엔 미투데이 이용자 모임(MDN?)도 다녀오고, 장군들과 노래방도 갔고 진정 평일보다 더 빡센 일정이였다. 눈을