`
cucaracha
  • 浏览: 140291 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A8f3fa2f-18ce-3862-897a-5d2209197c90
Java NIO.2
浏览量:87296
7a076ba7-8ec8-3241-aa3c-67bb2f7856a2
Java EE 7 简明教...
浏览量:36322
社区版块
存档分类
最新评论

[NIO.2] 第二十一篇 创建软链接

 
阅读更多
在 NIO.2 中,创建软链接非常简单,只需要调用 Files.createSymbolicLink() 方法即可。这个方法需要传入软链接和目标文件的 Path 对象,并且可以传入一组文件属性,返回软链接的 Path 对象。

如果你的文件系统不支持软链接,那么将会抛出 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/
0
1
分享到:
评论

相关推荐

    Java IO, NIO and NIO.2

    NIO.2还包含了许多其他的API扩展和改进,例如对符号链接的支持、文件属性访问、文件树遍历、WatchService等。 以上介绍了Java中的三种I/O机制。在实际开发中,它们各有适用场景。例如,Java IO适合进行传统的I/O...

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    java NIO.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...

    Java IO, NIO and NIO.2 原版pdf by Friesen

    New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...

    Pro Java 7 NIO.2.pdf

    根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...

    NIO.2 入门,第 2 部分: 文件系统 API

    本篇我们将深入探讨NIO.2中的几个关键概念和类,包括`Files`, `Path`, `FileAttributes`, `DirectoryWatcher`以及`FileVisitor`。这些组件极大地增强了Java对操作系统文件系统的访问能力。 首先,`Path`接口是NIO.2...

    java nio.pdf

    java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...

    Java I/O, NIO and NIO.2

    NIO.2,又称为New I/O 2或Java NIO 2,是在Java 7中引入的进一步扩展,主要增加了文件系统操作的支持,包括异步I/O操作、文件通道、文件锁定以及对符号链接的支持。AsynchronousFileChannel是NIO.2中新增的异步I/O...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    `Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO具有更好的性能和更高的灵活性。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。...

    优雅的操作文件:java.nio.file 库介绍.pdf

    【java.nio.file库详解】 Java 早期版本的文件I/O操作功能相对有限,存在几个显著问题:不支持现代文件系统特性、API设计复杂且冗长、处理大文件和并发性能不足。为了解决这些问题,Java引入了`java.nio.file`库,...

    Pro Java 7 NIO.2

    This book covers all the important aspects involved in developing NIO.2-based applications. It provides clear instructions for getting the most out of NIO.2 and offers many exercises and case studies ...

    ProJava7NIO.2PDFBooks.pdf 英文原版

    Pro Java 7 NIO.2 – PDF Books

    nio.zip_NIO_NewIO_NIO.c_java NIO chm_java nio

    NIO(New IO)是Java平台中用于处理输入/输出操作的一种高级API,它在Java 1.4版本中引入,以替代传统的IO流模型。NIO提供了更高效、更灵活的数据传输方式,尤其适用于高并发和大数据量的场景。 在Java的NIO体系中...

    蔚来-NIO.US-新车上市,蔚来可期.pdf

    蔚来(NIO.US)新车上市,蔚来可期 蔚来(NIO.US)是一家中国的新能源汽车制造商,专注于生产高性能的电动汽车。 公司的目标是成为中国最大的新能源汽车品牌,并且跻身全球汽车行业的前列。 蔚来2025年目标价45.5...

    java-nio.rar_NIO_java nio

    Java NIO,全称为New Input/Output,是Java在1.4版本引入的一个新特性,是对传统的I/O模型的一种改进。传统的Java I/O基于字节流和字符流,而NIO则提供了通道(Channels)和缓冲区(Buffers)的概念,以及非阻塞I/O...

Global site tag (gtag.js) - Google Analytics