Path VS File

Path是jdk7的新特性,目前来看有取代File的趋势。

相关的内容包括Path接口,Paths工具类,Files工具类。

一、构造Path对象

由于Path本身是一个接口,不能直接实例化,只能通过Paths工具类或FileSystems类构造。

1、通过FileSystem构造Path。

Path path = FileSystems.getDefault().getPath("C:/", "access.log");

2、通过Paths工具类构造Path。

查阅JDK文档发现,Paths工具类只包含两个静态方法,这两个方法全部是用于构造Path对象,分别为:

//Converts a path string, or a sequence of strings that when joined form a path string, to a Path.
static Path	get(String first, String... more)
//Converts the given URI to a Path object.
static Path	get(URI uri)

采用这两个方法构造Path的示例如下:

Path pathFromStr = Paths.get("C:/", "access.log");
        
URI uri = URI.create("file:///C:/access.log");        
Path pathFromUri = Paths.get(u);

查阅Paths工具类源代码,发现其get函数内部还是使用了FileSystem来构造Path。

二、Path方法介绍

1、compareTo方法

int	compareTo(Path other)
//Compares two abstract paths lexicographically.按照字典序比较两个Path,例如:
Path path1= Paths.get("/a/b/c/d");
Path path2= Paths.get("/a/b/f");
System.out.println(path1.compareTo(path2));
//输出为-3。

2、startWith、endWith方法。判断一个Path是不是另一个Path的前缀、后缀。

3、getFileName方法,返回当前路径中,包含的文件名,通俗理解就是最后一层目录的名称,例如:

Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.getFileName());
//输出为d

4、getFileSystem方法,返回当前系统所使用的文件系统,返回类型为FileSystem实例,例如:

Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.getFileSystem());
//输出为sun.nio.fs.MacOSXFileSystem@2f0e140b

5、getNameCount方法和getName方法。getNameCount方法返回当前Path中包含的目录层数,getName方法返回第index层目录的Path对象。

6、getParent方法和getRoot方法,这两个方法一看名字就明白。

7、resolve方法和resolveSibling方法。resolve方法的作用相当于把当前路径当成父目录,而把参数中的路径当成子目录或是其中的文件,进行解析之后得到一个新路径,resolveSibling方法的作用与resolve方法类似,只不过把当前路径的父目录当成解析时的父目录。

Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.resolve(Paths.get("e")));
//输出为/a/b/c/d/e
System.out.println(path1.resolveSibling(Paths.get("e")));
//输出为/a/b/c/e

8、relativize方法计算当前Path变换到参数给定的Path的相对路径,例如

Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.relativize(Paths.get("/a/b/")));
//输出为../..

9、toAbsolutePath方法,将当前路径转换为绝对路径。

Path path1= Paths.get("/a/b/c/d/a");
System.out.println(path1.toAbsolutePath());
//输出为/a/b/c/d/a
Path path2= Paths.get("a/b/c/d/a");
System.out.println(path2.toAbsolutePath());
//输出为/Users/suneony/IdeaProjects/FillRobot/a/b/c/d/a

10、normalize方法,将当前路径规范化

public final class Foo
{
    private static final List<String> INPUTS = Arrays.asList(
        "/foo", "//foo", "foo/", "foo/bar", "foo/bar/../baz", "foo//bar"
    );

    public static void main(final String... args)
    {
        Path path;

        for (final String input: INPUTS) {
            path = Paths.get("/", input).normalize();
            System.out.printf("%s -> %s\n", input, path);
        }
    }
}

/foo -> /foo
//foo -> /foo
foo/ -> /foo
foo/bar -> /foo/bar
foo/bar/../baz -> /foo/baz
foo//bar -> /foo/bar

后续继续介绍Files工具类与Path的配合使用方法。

欢迎大家访问我的小站http://www.toolset.site

转载于:https://my.oschina.net/u/1770519/blog/1605370

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值