[NIO.2] 21편 소프트 링크 만들기
4540 단어 NIO.2
파일 시스템에서 소프트 링크를 지원하지 않으면 UnsupportedOperationException 예외가 발생합니다.대상 파일은 절대 경로를 사용할 수도 있고 상대 경로를 사용할 수도 있으며 대상 파일 자체가 존재할 수도 있고 존재하지 않을 수도 있다는 것을 명심해라.
다음 코드는 기본 속성을 가진 소프트 링크를 간단하게 만들 것입니다.소프트 링크의 이름은rafael입니다.nadal.1 대상 파일 파일은 C:\rafaelnadal\photos\rafawinner.jpg:
…
Path link = FileSystems.getDefault().getPath("rafael.nadal.1");
Path target= FileSystems.getDefault().getPath("C:/rafaelnadal/photos", "rafa_winner.jpg");
try {
Files.createSymbolicLink(link, target);
} catch (IOException | UnsupportedOperationException | SecurityException e) {
if (e instanceof SecurityException) {
System.err.println("Permission denied!");
}
if (e instanceof UnsupportedOperationException) {
System.err.println("An unsupported operation was detected!");
}
if (e instanceof IOException) {
System.err.println("An I/O error occurred!");
}
System.err.println(e);
}
소프트 링크의 기본 속성을 바꾸려면createSymbolicLink 방법의 세 번째 파라미터를 사용할 수 있습니다. 이 파라미터의 유형은 File Attribute입니다. 이 대상은 소프트 링크를 만들 때 사용할 일련의 파일 속성을 봉인합니다.다음 코드는 대상 파일에서 파일 속성을 읽고 대상 파일의 파일 속성을 새로 만든 소프트 링크에 설정하는 방법을 보여 줍니다.새로 만든 소프트 링크의 이름은rafael입니다.nadal.2 대상 파일은 C:\rafaelnadal\photos\rafawinner.jpg:
…
Path link = FileSystems.getDefault().getPath("rafael.nadal.2");
Path target = FileSystems.getDefault().getPath("C:/rafaelnadal/photos", "rafa_winner.jpg");
try {
PosixFileAttributes attrs = Files.readAttributes(target, PosixFileAttributes.class);
FileAttribute<Set> attr =
PosixFilePermissions.asFileAttribute(attrs.permissions());
Files.createSymbolicLink(link, target, attr);
} catch (IOException | UnsupportedOperationException | SecurityException e) {
if (e instanceof SecurityException) {
System.err.println("Permission denied!");
}
if (e instanceof UnsupportedOperationException) {
System.err.println("An unsupported operation was detected!");
}
if (e instanceof IOException) {
System.err.println("An I/O error occured!");
}
System.err.println(e);
}
또한 setattribute () 방법을 사용하여 파일 속성을 변경할 수도 있습니다.예를 들어 다음 코드는 대상 파일의 lastModifiedTime과 lastAccessTime 속성을 읽고 이 두 속성을 새로 만든 소프트 링크에 설정합니다.새로 만든 소프트 링크의 이름은rafael입니다.nadal.3, 대상 파일은 C:\rafaelnadal\photos\rafawinner.jpg:
…
Path link = FileSystems.getDefault().getPath("rafael.nadal.3");
Path target = FileSystems.getDefault().getPath("C:/rafaelnadal/photos", "rafa_winner.jpg");
try {
Files.createSymbolicLink(link, target);
FileTime lm = (FileTime) Files.getAttribute(target,
"basic:lastModifiedTime", NOFOLLOW_LINKS);
FileTime la = (FileTime) Files.getAttribute(target,
"basic:lastAccessTime", NOFOLLOW_LINKS);
Files.setAttribute(link, "basic:lastModifiedTime", lm, NOFOLLOW_LINKS);
Files.setAttribute(link, "basic:lastAccessTime", la, NOFOLLOW_LINKS);
} catch (IOException | UnsupportedOperationException | SecurityException e) {
if (e instanceof SecurityException) {
System.err.println("Permision denied!");
}
if (e instanceof UnsupportedOperationException) {
System.err.println("An unsupported operation was detected!");
}
if (e instanceof IOException) {
System.err.println("An I/O error occured!");
}
System.err.println(e);
}
참고: 소프트 링크가 이미 있는 경우 FileAlready Exists Exception 예외가 소프트 링크를 만들 때 발생합니다.
기사 출처:
http://www.aptusource.org/2014/04/nio-2-creating-a-symbolic-link/