Java的Path、Paths和Files

前言

因为这几天被java.nio的这几个接口和工具类卡到了,就顺便地查了一波文档以及使用方法,这篇其实更像是API的复制粘贴,只不过我在注释里多写了一些output和注意事项,看不惯API的可以选择不看,下面贴一下常用的,文档资料的主要来源

java2s:http://www.java2s.com/Tutorials/Java/java.nio.file/Files/index.htm
极客教程:https://geek-docs.com/java/java-tutorial/java-tutorials-index.html

java.nio

文件属性

  • java.nio.attribute包包含与属性相关的类。它将文件属性捆绑在以下六种视图中。
    1. BasicFileAttributeView管理基本文件属性,例如创建时间,上次访问时间,上次修改时间,大小,文件类型(常规文件,目录,符号链接或其他)以及文件密钥(文件的唯一编号)。所有平台均支持此视图。

    2. DosFileAttributeView扩展了BasicFileAttributeView来访问特定于DOS的文件属性。它提供了检查文件是否为隐藏文件,系统文件,存档文件和只读文件的支持。它仅在支持DOS的系统(例如Microsoft Windows)上可用。

    3. POSIX代表UNIX的可移植操作系统接口。PosixFileAttributeView扩展了BasicFileAttributeView并添加了对支持POSIX标准的系统(例如UNIX)上可用的属性的支持。它使我们可以管理所有者,组和[相关访问]权限。

    4. FileOwnerAttributeView管理文件的所有者。

    5. ACL代表访问控制列表。AclFileAttributeView管理文件的ACL。

    6. UserDefinedFileAttributeView管理文件的一组用户定义的属性。属性的名称是字符串。属性的值可以是任何数据类型。

  • FileStore类中的supportsFileAttributeView()方法用于判断该系统是否支持以上的视图

  • 然后就是获取这些视图的方法主要就是Files类里的getAttribute(...)readAttributes(...)了,当然setAttribute(...)就肯定使用来设置文件属性的啦


Paths

先介绍一下工具类Paths,因为就两个方法用来生成Path对象,以供Path和Files使用;而Path也经常由Paths来生成,又或者File类有一个toPath();方法可以使用

static Path get(String first, String... more) 
//将路径字符串或连接到路径字符串的字符串序列转换为 Path,可以get("c:/abc");或者get("c:","abc"),注意这里可以有多个参数String... more代表n个参数,这个比较常用
static Path get(URI uri) 
//将给定的URI转换为Path对象


Path

接着是Path接口,用来替换File的新接口,虽然名字是 路径 ,但其实也可以是文件

  • 先是构造方式

    Path toPath() 
    //File类对象方法--返回一个java.nio.file.Path对象
    abstract Path getPath(String first, String... more) 
    //FileSystem对象方法--将路径字符串或从路径字符串连接起来的一系列字符串转换为 Path 。  
    /* 然后就是上面的Paths工具类啦,应该还有我不知道的一些姿势,大家自行探索 */
  • 然后是常用方法,会发现Path接口没什么判断方法,其实更多的判断和操作都在Files工具类里面

    boolean isAbsolute() 
    //告诉这条路是否是绝对的
    boolean endsWith(Path other) 
    //测试此路径是否以给定的路径结束
    boolean endsWith(String other) 
    //测试此路径是否以给定字符串结束,如"c:/a/banana/cat"可以以"/banana/cat"结尾,但不能以"t"结尾
    boolean startsWith(Path other) 
    //测试此路径是否以给定的路径开始。  
    boolean startsWith(String other) 
    //测试此路径是否以给定字符串开始,跟上面一样规律
    
    Path getFileName() 
    //将此路径表示的文件或目录的名称返回为 Path对象,文件名或文件夹名,不含路径
    Path getName(int index) 
    //返回此路径的名称元素作为 Path对象。目录中最靠近root的为0,最远的为(count-1),count由下面的方法获得
    int getNameCount() 
    //返回路径中的名称元素的数量。0则只有root
    Path getParent() 
    //返回 父路径,如果此路径没有父返回null,如/a/b/c返回/a/b,配合下面的方法消除"."或".."
    Path normalize()
    //返回一个路径,该路径是冗余名称元素的消除。如消除掉"."、".."
    Path getRoot() 
    //返回此路径的根组分作为 Path对象,或 null如果该路径不具有根组件。如返回"c:/"
    Path relativize(Path other) 
    //构造此路径和给定路径之间的相对路径。有点难理解,p1-"Topic.txt",p2-"Demo.txt",p3-"/Java/JavaFX/Topic.txt",p4-"/Java/2011";;那么p1和p2的结果是"../Demo.txt";;p2和p1的结果是"../Topic.txt";;p3和p4的结果是"../../2011";;p4和p3的结果是"../JavaFX/Topic.txt"
    Path resolve(String other)
    //将给定的路径字符串转换为 Path。如"c:/a/b"和字符串"c.txt"的结果是"c:/a/b/c.txt";更像是拼接
    Path resolveSibling(String other) 
    //将给定的路径字符串转换为 Path。如"c:/a/b.txt"和字符串"c.txt"的结果是"c:/a/c.txt";更像是替换
    Path subpath(int beginIndex, int endIndex) 
    //返回一个相对的 Path ,它是该路径的名称元素的子序列,如"d:/a/b/c.txt"参数为(1,3)返回一个"b/c.txt"
    Path toAbsolutePath() 
    //返回表示此路径的绝对路径的 Path对象。包括盘符和文件名或文件夹名
    
    Iterator iterator() 
    //返回此路径的名称元素的迭代器。"c:/a/b/c.txt"的迭代器可以next出以下"a""b""c.txt"
    File toFile() 
    //返回表示此路径的File对象


    Files

最后就是神奇的Files工具类,主要和Path接口的对象进行配合使用


FileSystem

常由FileSystems工具类的getDefault()来生成默认的实例,然后配合FileStore做一些判断,目前还不知道有啥用


FileStore

文件存储池,主要的几个方法用来检测文件系统——FileSystem是否支持一些操作,还有获取FileSystem的一些属性

  • 可以通过FileSystem的getFileStores()进行获取

  • 一些常用的接口方法

    abstract boolean supportsFileAttributeView(类 type) 
    //告诉这个文件存储是否支持由给定文件属性视图标识的文件属性。  
    abstract boolean supportsFileAttributeView(String name) 
    //告诉这个文件存储是否支持由给定文件属性视图标识的文件属性。  


FileTime

表示文件时间戳属性的值,你们可能会在设置文件最后更新属性时碰到这个,顺便提一下使用方法

  • 一些API的方法,这里只放几个可能用得到的方法,更多的可以看官方文档

    static FileTime fromMillis(long value) 
    //返回一个 FileTime以 FileTime单位表示给定值。  
    long toMillis() 
    //返回以毫秒为单位的值。
    String toString() 
    //返回此 FileTime的字符串表示 FileTime 。  
  • 使用方法

    /**
     * 可能你要从文件属性中的FileTime或者到一个Date对象
     */
    Path pathObj = Paths.get("C:/a/b/c.txt");
    BasicFileAttributes attrs = Files.readAttributes(pathObj, BasicFileAttributes.class);
    Data date = new Date(attrs.lastModifiedTime().toMillis());
    
    /**
     * 又或者可能你要人为地修改这个文件时间属性,需要一个FileTime
     */
    Path path = Paths.get("C:/a/b/c.txt");
    long time = System.currentTimeMillis();
    FileTime fileTime = FileTime.fromMillis(time);
    try{
      Files.setAttribute(path, "basic:lastModifiedTime", fileTime,LinkOption.NOFOLLOW_LINKS);
    }catch (IOException e) {
        System.err.println(e);
    }

你可能感兴趣的:(Java的Path、Paths和Files)