[NIO.2] 21편 소프트 링크 만들기

4540 단어 NIO.2
재니오2에서 플로피 링크를 만드는 것은 매우 간단합니다. Files를 호출하기만 하면 됩니다.createSymbolicLink() 메서드를 사용하면 됩니다.이 방법은 소프트 링크와 대상 파일의 Path 대상을 전송해야 하며, 파일 속성 그룹을 전송하여 소프트 링크의 Path 대상을 되돌릴 수 있다.
파일 시스템에서 소프트 링크를 지원하지 않으면 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/

좋은 웹페이지 즐겨찾기