[NIO.2] 第二十一篇 创建软链接
程序员文章站
2022-04-25 23:07:56
...
在 NIO.2 中,创建软链接非常简单,只需要调用 Files.createSymbolicLink() 方法即可。这个方法需要传入软链接和目标文件的 Path 对象,并且可以传入一组文件属性,返回软链接的 Path 对象。
如果你的文件系统不支持软链接,那么将会抛出 UnsupportedOperationException 异常。记住,目标文件可以使用绝对路径也可以使用相对路径来定义,并且目标文件本身可以存在也可以不存在。
下面的代码将会简单创建一个拥有默认属性的软链接。软链接名为 rafael.nadal.1 目标文件文件为 C:\rafaelnadal\photos\rafa_winner.jpg:
当你需要改变软链接的默认属性时,可以使用 createSymbolicLink 方法的第三个参数,这个参数的类型是 FileAttribute - 这个对象将封装一系列的文件属性供创建软链接的时候使用。下面的代码将演示如何从目标文件读取文件属性,并且将目标文件的文件属性设置到新创建的软链接上。新创建的软链接名为 rafael.nadal.2 目标文件是 C:\rafaelnadal\photos\rafa_winner.jpg:
另外,也可以使用 setAttribute() 方法来更改文件属性。例如,下面的代码将读取目标文件的 lastModifiedTime 和 lastAccessTime 属性,并将这两个属性设置到新创建的软链接上。新创建的软链接名为 rafael.nadal.3,目标文件是 C:\rafaelnadal\photos\rafa_winner.jpg:
注:如果软链接已经存在,那么在创建软链接的时候会抛出 FileAlreadyExistsException 异常。
文章来源:http://www.aptusource.org/2014/04/nio-2-creating-a-symbolic-link/
如果你的文件系统不支持软链接,那么将会抛出 UnsupportedOperationException 异常。记住,目标文件可以使用绝对路径也可以使用相对路径来定义,并且目标文件本身可以存在也可以不存在。
下面的代码将会简单创建一个拥有默认属性的软链接。软链接名为 rafael.nadal.1 目标文件文件为 C:\rafaelnadal\photos\rafa_winner.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 方法的第三个参数,这个参数的类型是 FileAttribute - 这个对象将封装一系列的文件属性供创建软链接的时候使用。下面的代码将演示如何从目标文件读取文件属性,并且将目标文件的文件属性设置到新创建的软链接上。新创建的软链接名为 rafael.nadal.2 目标文件是 C:\rafaelnadal\photos\rafa_winner.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\rafa_winner.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); }
注:如果软链接已经存在,那么在创建软链接的时候会抛出 FileAlreadyExistsException 异常。
文章来源:http://www.aptusource.org/2014/04/nio-2-creating-a-symbolic-link/