一旦确认了文件系统上的一个文件或目录,那么就可以定义一个 Path 类来指向它。定义 Path 类可以使用绝对路径、相对路径、路径中带有一个点号“.”(表示当前目录)、路径中带有两个点“..”(表示上一层目录)等。定义 Path 类最简单的方法是调用辅助类 Paths 的 get() 方法。下面将介绍使用不同的方式来得到 C:\rafaelnadal\tournaments\2009\BNP.txt 文件的 Path 对象。

定义绝对路径

绝对路径(有时也成为全路径)是指包含了根目录以及所有子目录以及文件名的文件路径。在 NIO.2 中定义绝对路径只需要一行代码,下面的例子定义了 C:\rafaelnadal\tournaments\2009 目录下的 BNP.txt 文件(测试的时候,这个文件有可能不存在):

Path path = Paths.get("C:/rafaelnadal/tournaments/2009/BNP.txt");
1
Path path=Paths.get("C:/rafaelnadal/tournaments/2009/BNP.txt");

get() 方法也支持将文件路径分块。NIO 将会自动重建文件路径。如果你将文件路径分块,那么你就不用再考虑文件路径分隔符。前面的绝对路径例子中的路径可以被分块改写为:

Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt");
Path path = Paths.get("C:", "rafaelnadal/tournaments/2009", "BNP.txt");
Path path = Paths.get("C:", "rafaelnadal", "tournaments", "2009", "BNP.txt");
1
2
3
Path path=Paths.get("C:/rafaelnadal/tournaments/2009","BNP.txt");
Path path=Paths.get("C:","rafaelnadal/tournaments/2009","BNP.txt");
Path path=Paths.get("C:","rafaelnadal","tournaments","2009","BNP.txt");

定义根目录的相对路径

相对路径是绝对路径中的一部分。相对路径经常在创建 web 页面的时候使用。相对路径比绝对路径使用更广泛。定义当前文件存储根目录的相对路径,此路径需要由文件分隔符开始。在下面的例子中,如果当前文件存储的根 目录是 C: ,那么文件的绝对路径就是 C:\rafaelnadal\tournaments\2009\BNP.txt:

Path path = Paths.get("/rafaelnadal/tournaments/2009/BNP.txt");
Path path = Paths.get("/rafaelnadal","tournaments/2009/BNP.txt");
1
2
Path path=Paths.get("/rafaelnadal/tournaments/2009/BNP.txt");
Path path=Paths.get("/rafaelnadal","tournaments/2009/BNP.txt");

定义工作目录的相对路径

当你定义当前工作目录的相对路径的时候,此路径不需要由文件分隔符开始。假设你的工作目录是 C: 根目录下的 /ATP 目录,那么下面的代码片段定义的文件是 C:\ATP\rafaelnadal\tournaments\2009\BNP.txt:

Path path = Paths.get("rafaelnadal/tournaments/2009/BNP.txt");
Path path = Paths.get("rafaelnadal","tournaments/2009/BNP.txt");
1
2
Path path=Paths.get("rafaelnadal/tournaments/2009/BNP.txt");
Path path=Paths.get("rafaelnadal","tournaments/2009/BNP.txt");

使用通配符定义路径

一般情况下,使用一个点“.”表示当前目录,使用两个点“..”表示父目录这是公认的做法。在 NIO.2 中可以使用 Path.normalize() 方法来消除路径中的冗余(即删除路径中的 /. 或 /..):

Path path = Paths.get("C:/rafaelnadal/tournaments/2009/dummy/../BNP.txt").normalize();
Path path = Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt").normalize();
1
2
Path path=Paths.get("C:/rafaelnadal/tournaments/2009/dummy/../BNP.txt").normalize();
Path path=Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt").normalize();

如果你想看看 normalize() 方法的效果,可以分别打印下面两行代码执行后的路径:

Path noNormalize = Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt");
Path normalize = Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt").normalize();
1
2
Path noNormalize=Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt");
Path normalize=Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt").normalize();

使用 System.out.println() 分别打印两个结果,可以看到 normalize 方法移除了冗余信息:

C:\rafaelnadal\tournaments\.\2009\dummy\..\BNP.txt
C:\rafaelnadal\tournaments\2009\BNP.txt
1
2
C:\rafaelnadal\tournaments\.\2009\dummy\..\BNP.txt
C:\rafaelnadal\tournaments\2009\BNP.txt

使用 URI 定义路径

在有的情况下,你可能需要从 URI 创建 Path 对象。可以通过 URI.create() 从给定的字符串创建 URI 对象,然后将 URI 对象作为参数传给 Paths.get() 方法。如果你需要将浏览器的地址栏输入的信息封装进字符串的话,这一招非常有用:

import java.net.URI;

Path path = Paths.get(URI.create("file:///rafaelnadal/tournaments/2009/BNP.txt"));
Path path = Paths.get(URI.create("file:///C:/rafaelnadal/tournaments/2009/BNP.txt"));
1
2
3
4
import java.net.URI;
Path path=Paths.get(URI.create("file:///rafaelnadal/tournaments/2009/BNP.txt"));
Path path=Paths.get(URI.create("file:///C:/rafaelnadal/tournaments/2009/BNP.txt"));

使用 FileSystems.getDefault().getPath() 定义路径

另一个创建 Path 对象的通用方法是通过 FileSystem 类。首先调用 getDefault() 方法获得默认 FileSystem—— NIO.2 将会生成可以访问默认文件系统的通用对象。然后,调用 getPath() 方法(前面例子中使用的 Paths.get() 方式是这种方式的简写形式):

import java.nio.file.FileSystems;

Path path = FileSystems.getDefault().getPath("/rafaelnadal/tournaments/2009", "BNP.txt");
Path path = FileSystems.getDefault().getPath("/rafaelnadal/tournaments/2009/BNP.txt");
Path path = FileSystems.getDefault().getPath("rafaelnadal/tournaments/2009", "BNP.txt");
Path path = FileSystems.getDefault().
                        getPath("/rafaelnadal/tournaments/./2009","BNP.txt").normalize();
1
2
3
4
5
6
7
import java.nio.file.FileSystems;
Path path=FileSystems.getDefault().getPath("/rafaelnadal/tournaments/2009","BNP.txt");
Path path=FileSystems.getDefault().getPath("/rafaelnadal/tournaments/2009/BNP.txt");
Path path=FileSystems.getDefault().getPath("rafaelnadal/tournaments/2009","BNP.txt");
Path path=FileSystems.getDefault().
                       getPath("/rafaelnadal/tournaments/./2009","BNP.txt").normalize();

获取 Home 目录的路径

当你在需要获得 Home 目录的路径的时候,可以使用下面的样例代码(返回的 Home 目录依赖不同的机器和不同的操作系统):

Path path = Paths.get(System.getProperty("user.home"), "downloads", "game.exe");
1
Path path=Paths.get(System.getProperty("user.home"),"downloads","game.exe");

在我的 Windows 7 机器上,将会返回 C:\Users\Terry\downloads\game.exe,在我的 Linux 上,将会返回 /home/Terry/downloads/game.exe。

JAVA nio 2 定义 Path 类的更多相关文章

  1. JAVA nio 2 和 Path 类简介

    想要初步了解 NIO.2 API,也就是通常所说的“JSR203: More New I/O APIs for the Java Platform”,最好的切入点就是新的抽象类 java.nio.fi ...

  2. 转载Java NIO中的Files类的使用

    Java NIO中的Files类(java.nio.file.Files)提供了多种操作文件系统中文件的方法. Files.exists() Files.exits()方法用来检查给定的Path在文件 ...

  3. Java NIO之拥抱Path和Files

    Java面试通关手册(Java学习指南)github地址(欢迎star和pull):https://github.com/Snailclimb/Java_Guide 历史回顾: Java NIO 概览 ...

  4. Java初学者作业——编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能. 实现思路: 定义 Employee 类,并定义属性 ...

  5. Java NIO学习(Path接口、Paths和Files工具类的使用)

    NIO学习:Paths和Files工具类的使用 JDK1.7引入了新的IO操作类.在java.nio.file包下,Java NIO Path接口和Files类. Path接口:Path表示的是一个目 ...

  6. Java NIO.2 使用Path接口来监听文件、文件夹变化

    Java7对NIO进行了大的改进,新增了许多功能: 对文件系统的访问提供了全面的支持 提供了基于异步Channel的IO 这些新增的IO功能简称为 NIO.2,依然在java.nio包下. 早期的Ja ...

  7. Java初学者作业——定义客户类(Customer),客户类的属性包括:姓名、年龄、电话、余额、账号和密码;方法包括:付款。

    返回本章节 返回作业目录 需求说明: 定义客户类(Customer),客户类的属性包括:姓名.年龄.电话.余额.账号和密码:方法包括:付款. 实现思路: 定义 Customer 类,并添加姓名.余额. ...

  8. Java初学者作业——定义英雄类(Hero),英雄类中的属性包括:姓名、攻击力、防御力、生命值和魔法值;方法包括:攻击、介绍。

    返回本章节 返回作业目录 需求说明: 定义英雄类(Hero),英雄类中的属性包括:姓名.攻击力.防御力.生命值和魔法值:方法包括:攻击.介绍. 实现思路: 分析类的属性及其变量类型. 分析类的方法及其 ...

  9. Java初学者作业——定义管理员类(Admin),管理员类中的属性包括:姓名、账号、密码、电话;方法包括:登录、显示自己的信息。

    返回本章节 返回作业目录 需求说明: 定义管理员类(Admin),管理员类中的属性包括:姓名.账号.密码.电话:方法包括:登录.显示自己的信息. 实现思路: 分析类的属性及其变量类型. 分析类的方法及 ...

随机推荐

  1. 【转】Android开启网络调试的方法

    方法是偶然看到的: Android 终端adbd服务需要开启5555号端口来建立于adb的连接,如果未开启5555端口,则不能通过网络调试 查看是否可以网络调试: # netstat Android ...

  2. jQuery类名添加click方法

    通过$("").jQuery为元素添加点击事件,在使用类的情况下,可以使用$(e.target).attr('title');获得被点击元素的属性值. 示例代码如下 $(" ...

  3. [python selenium] 操作方法整理

    个人笔记,摘抄自虫师python selenum,仅供个人参考 1.安装: pip install selenium 下载webdriver # webdriver 下载并放置在python主目录 · ...

  4. linux 下nginx安装

    一.一键安装四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 二.创建一个安装目录,并下载nginx安装 ...

  5. CSUOJ 1162 Balls in the Boxes 快速幂

    Description Mr. Mindless has many balls and many boxes,he wants to put all the balls into some of th ...

  6. 使用easypoi导出excel

    EasyPOI是在jeecg的poi模块基础上,继续开发独立出来的,可以说是2.0版本,EasyPoi封装的目的和jeecg一致,争取让大家write less do more ,在这个思路上easy ...

  7. 不定期更新的IDEA功能整理

    目录 不定期更新的IDEA功能整理 idea 命令 Preferences 和 Project Structure Keymap HTTP Proxy Postfix Completion 插件 插件 ...

  8. 【原创】MySQL常用脚本整理

    #1.查看表容量空间 ) ) ) AS 'free_size(G)' FROM information_schema.tables WHERE TABLE_SCHEMA='test' AND TABL ...

  9. [leetcode DP]91. Decode Ways

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  10. 解决mongo 端口占用问题

    在打开mongod之后如果不用了就按ctrl + c ,就不会出现以下的问题了 执行mongod报错 mongod 2016-08-03T14:31:15.691+0800 I CONTROL [in ...