Java--Path详解

Path

Path表示的是一个目录名序列,其后还可以跟着一个文件名。路径中的第一个部件可以是根部件,例如/C:\,而允许访问的根部件取决于文件系统。

以根部件开始的路径是绝对路径;否则,就是相对路径。

例如,我们要分别创建一个绝对路径和一个相对路径;其中,对于绝对路径,我们假设计算机运行的是类Unix的文件系统:

Path absolute = Paths.get("/Users", "acton_zhang");
Path relative = Paths.get("pers", "zhang", "ThreadDemo.java");

静态的Paths.get方法接受一个或多个字符串,并将他们用默认文件系统的路径分隔符(类Unix文件系统是/,Windows是\)连接起来。然后解析连接起来的结果,如果其表示的不是给定文件系统中的合法路径,那么就抛出InvalidPathException异常。这个连接起来的结果就是一个Path对象。

get方法可以获取包含多个部件构成的单个字符串,例如,可以像下面这样从配置文件中读取路径:

String baseDir = props.getProperty("base.dir");
//May be a string such as /opt/myprog or c:\Program Files\myprog
Path basePath = Paths.get(baseDir);

注意:路径不必对应者某个实际存在的文件,它仅仅只是一个抽像的名字序列。

组合或解析路径是司空见惯的操作,调用p.resolve(q)将按照下列规则返回一个路径:

  • 如果q是绝对路径,则结果就是q
  • 否则,根据文件系统的规则,将『p后面跟着q』作为结果
Path absolute = Paths.get("/Users", "acton_zhang");
Path relative = Paths.get("pers", "zhang", "ThreadDemo.java");
System.out.println(absolute);
System.out.println(relative);

System.out.println(absolute.resolve("/bin"));
System.out.println(absolute.resolve("bin"));

//输出:
/Users/acton_zhang
pers/zhang/ThreadDemo.java
/bin
/Users/acton_zhang/bin

假设你的应用系统需要查找相对于给定基目录的工作目录,其中基目录是从配置文件中读取的,就像前面一样:

Path workRelative = Paths.get("work");
Path workPath = basePath.resolve(workRelative);

resolve方法有一种快捷方式,它接受一个字符串而不是路径:

Path workPath = basePath.resolve("work");

还有一个很方便的方法resolveSibling它通过解析路径的父路径产生其兄弟路径:

Path workPath = Paths.get("/opt", "myapp", "word");
Path temp = workPath.resolveSibling("temp");
System.out.println(temp);///opt/myapp/temp

resolve的对立面是relativize,即调用p.relativize®将产生路径q,而对q进行解析的结果正是r,例如:以『/home/cay』为目标对『/home/fred/myprog』进行相对化操作,会产生『…/fred/myprog』:

Path p = Paths.get("/home", "cay");
Path r = Paths.get("/home/fred/myprog");
Path q = p.relativize(r);
System.out.println(q);//../fred/myprog

normalize方法将移出所有冗余的...部件(或者文件系统认为冗余的所有部件),例如:规范化『/home/cay/…/fred/./myprog』将产生『/home/fred/myprog』

        Path path = Paths.get("/home/cay/../fred/./myprog");
        Path normalize = path.normalize();
        System.out.println(normalize);///home/fred/myprog

toAbsolutePath方法将产生给定路径的绝对路径,该绝对路径从根部件开始:

        Path relative = Paths.get("pers", "zhang", "ThreadDemo.java");
        Path path1 = relative.toAbsolutePath();
        System.out.println(path1);///Users/acton_zhang/J2EE/SpringCloudWorkSpace/FunctionalProgramming/pers/zhang/ThreadDemo.java

注意:偶尔,可能需要与遗留系统的API交互,它们使用的是File类而不是Path接口。Path接口有一个toFile方法,而File类有一个toPath方法。

常用方法

java.nio.file.Paths

  • public static Path get(String first, String... more)
    通过连接给定的字符串创建一个路径;

java.nio.file.Path 7

  • Path resolve(Path other)

  • Path resolve(String other)
    如果other是绝对路径,那么就返回other;否则,返回通过连接this和other获得的路径;

  • Path resolveSibling(Path other)

  • Path resolveSibling(String other)
    如果other是绝对路径,那么就返回other;否则,返回通过连接this的父路径和other获得的路径;

  • Path relativize(Path other)
    返回用this进行解析,相对于other的相对路径;

  • Path normalize()
    移出诸如 . 和 … 等冗余的路径元素

  • Path toAbsolutePath()
    返回与该路径等价的绝对路径

  • Path getParent()
    返回父路径,或者在该路径没有父路径时,返回null

  • Path getFileName()
    返回该路径的最后一个不见,或者在该路径没有任何部件时,返回null

  • Path getRoot()
    返回该路径的根部件,或者在该路径没有任何根部件时,返回null

  • toFile()
    从该路径中创建一个File对象

java.io.File 1.0

  • Path toPath() 7
    从该文件中创建一个Path对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值