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
INTP의 자기파괴적 시나리오
클럽하우스 INTP 방을 체험했다. 고향에 온 것 같았다. 스스로 채운 답안이라는 점과 분류가 16개뿐이라 신뢰할 수 없다는 점을 숙지한다면 MBTI는 사회적으로 소비하기에 괜찮은 콘텐츠라 글을 써본다. INTP
LLM 시대에도 GUI는 사라지지 않는다
어디선가 LLM 발달로 GUI가 없어질 거란 주장을 봤는데 그러려면 모든 고객이 자기가 원하는 바를 명료한 언어로 표현할 능력이 있어야 할 거다. 당연히 그럴 리 없다. 아주 어렸을 때부터 GUI에 익숙해져서
정신분석학으로 본 인간의 방어 메커니즘
정신분석학에서 정의한 용어들은 방어를 기준으로 설명된 것이 많다. 그리고 사회적으로 장애나 병 수준으로 분류되는 대부분의 사람들은 어떤 이유에서든 그 방어력이 낮아 본인이 불편함을 느끼거나 남에게 자주 발각되는