[NIO.2] 定义 Path 类_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > [NIO.2] 定义 Path 类

[NIO.2] 定义 Path 类

 2014/3/24 18:50:44  cucaracha  程序员俱乐部  我要评论(0)
  • 摘要:一旦确认了文件系统上的一个文件或目录,那么就可以定义一个Path类来指向它。定义Path类可以使用绝对路径、相对路径、路径中带有一个点号“.”(表示当前目录)、路径中带有两个点“..”(表示上一层目录)等。定义Path类最简单的方法是调用辅助类Paths的get()方法。下面将介绍使用不同的方式来得到C:\rafaelnadal\tournaments\2009\BNP.txt文件的Path对象。定义绝对路径绝对路径(有时也成为全路径)是指包含了根目录以及所有子目录以及文件名的文件路径
  • 标签:
一旦确认了文件系统上的一个文件或目录,那么就可以定义一个 Path 类来指向它。定义 Path 类可以使用绝对路径、相对路径、路径中带有一个点号“.”(表示当前目录)、路径中带有两个点“..”(表示上一层目录)等。定义 Path 类最简单的方法是调用辅助类 Paths 的 get() 方法。下面将介绍使用不同的方式来得到 C:\rafaelnadal\tournaments\2009\BNP.txt 文件的 Path 对象。

定义绝对路径

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

class="java" name="code">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");


定义根目录的相对路径

相对路径是绝对路径中的一部分。相对路径经常在创建 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");


定义工作目录的相对路径

当你定义当前工作目录的相对路径的时候,此路径不需要由文件分隔符开始。假设你的工作目录是 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");


使用通配符定义路径

一般情况下,使用一个点“.”表示当前目录,使用两个点“..”表示父目录这是公认的做法。在 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();


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

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


使用 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"));


使用 Filesystems.html" target="_blank">Systems.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();


获取 Home 目录的路径

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

文章来源:http://www.aptusource.org/2014/03/defining-a-path/
  • 相关文章
发表评论
用户名: 匿名