【Java Core】输入与输出 6

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

本系列将介绍Java中用于输入和输出的各种应用编程接口(Application Programming Interface, API)。

1. Paths的其他常用方法

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

  • 如果q是绝对路径,则结果就是q。
  • 否则,根据文件系统的规则,将p后面跟着q作为结果。

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

    Path relativePath = Paths.get("demo");
    Path path = basePath.resolve(relativePath);
复制代码

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

    Path workPath = basePath.resolve("demo");
复制代码

还有一个很方便的方法resloveSibling,它通过解析指定路径的父路径产生其兄弟路径。例如,如果workPath是/opt/myfile/work,那么下面的调用

    Path tempPath = workPath.resloveSibling("temp");
复制代码

将创建/opt/myfile/temp。

reslove的对立面是relativize,即调用p.relativize(r)将会产生路径q,而对q解析的结果正是r。例如,以/home/jack为目标对/home/fred/demo.txt进行相对化操作,会产生../fred/input.txt,其中我们假设...表示文件系统中的父目录。 normalize方法将会移除所有的冗余的.和..部件(或者是文件系统认为冗余的所有部件)。例如,规范化/home/jack/../fred/./input.txt将产生/home/fred/input.txt。 toAbsloutePath方法将会产生给定路径的相对路径,该绝对路径从根部件开始,例如/home/fred/input.txt或C:\Users\fred\input.txt。 Path类有许多有用的方法用来将路径断开。下面的代码示例展示了其中部分最有用的方法:

    Path p = Paths.get("/home", "jack", "myfile.properties");
    Path parent = p.getParent(); // /home/jack
    Path file = p.getFileName(); // myfile.properties
    Path root = p.getRoot(); // the path /
复制代码

我们还可以从Path对象中构建Scanner对象:

    Scanner scanner = new Scanner(Paths.get("/home/jack/myfile.properties"));
复制代码

偶尔我们需要与遗留系统的API交互,它们使用的是File类而不是Path接口。Path接口有一个toFile方法,而File类有一个toPath方法。 而getFileName方法会返回该路径的最后一个部件,或者在该路径没有任何部件时,返回null。 getRoot方法会返回该路径的根部件,或者在该路径没有任何根部件时,返回null。

感谢观看,这是Java输入与输出的第6篇文章,如果您有兴趣,可以关注一下我,方便查看后续文章,一起学习,共同进步,不胜感激!

猜你喜欢

转载自juejin.im/post/7032851675085815822