`
cucaracha
  • 浏览: 141425 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A8f3fa2f-18ce-3862-897a-5d2209197c90
Java NIO.2
浏览量:87911
7a076ba7-8ec8-3241-aa3c-67bb2f7856a2
Java EE 7 简明教...
浏览量:36709
社区版块
存档分类
最新评论

[NIO.2] 第三篇 定义 Path 类

阅读更多
一旦确认了文件系统上的一个文件或目录,那么就可以定义一个 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");


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.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/
分享到:
评论

相关推荐

    NIO.2 入门,第 2 部分: 文件系统 API

    本篇我们将深入探讨NIO.2中的几个关键概念和类,包括`Files`, `Path`, `FileAttributes`, `DirectoryWatcher`以及`FileVisitor`。这些组件极大地增强了Java对操作系统文件系统的访问能力。 首先,`Path`接口是NIO.2...

    java下载图片的几种方式,提供源代码

    3. **使用Java 8的Files工具类** 自Java 8起,`java.nio.file.Files`工具类提供了很多便捷的文件操作方法。以下是如何使用它来下载图片: ```java import java.net.URL; import java.nio.channels.Channels; ...

    上传文件工具类

    此外,`java.net`包的`HttpURLConnection`或第三方库如Apache HttpClient、OkHttp也可能用于处理网络请求。 `UploadState.java`可能定义了一个枚举类型,用于表示文件上传过程中的不同状态,例如“上传成功”、...

    二维码生成

    二维码生成技术是现代信息化社会中广泛应用的一种数据编码...通过这个项目,初学者可以掌握Java编程基础以及第三方库的使用,同时理解二维码编码与解码的基本原理,为后续的移动开发、物联网应用等领域打下坚实的基础。

    springboot

    它集成了大量常用的第三方库配置,如数据访问、安全、消息等,使得开发者能够快速地“开箱即用”。在当前数字化转型的时代,SpringBoot的使用确已成为一个重要的趋势,它大大提高了开发效率,降低了项目的维护成本。...

    java制作二维码

    这些功能可以通过ZXing库的API实现,或者借助其他第三方库如`qrcode-detector-decoder`来辅助完成。 总的来说,Java通过ZXing库提供了灵活且强大的二维码生成能力,开发者可以根据项目需求选择合适的方式实现。无论...

    Java11-16章课堂代码(参考视频11.1-16.11)

    **第15章:NIO.2** NIO.2提供了异步I/O和文件系统操作,改善了Java的I/O性能: 1. 文件系统API:如Files类提供的静态方法,用于文件操作。 2. Path接口:表示文件系统路径,支持多种操作如创建、删除、重命名等。 3...

    一个非常简单实用的表单上传文件示例.rar

    在实际开发中,可以使用第三方库如Apache Commons FileUpload或者Spring框架提供的MultipartFile来简化文件上传的处理。 总的来说,Java实现表单上传文件涉及了HTML表单、Servlet API以及文件操作等多个知识点。...

    java生成二维码.doc

    3. 将`BitMatrix`转换为图像:使用`MatrixToImageWriter`类,将`BitMatrix`对象转换为`BufferedImage`,这是一个Java标准的图像类,可以进一步保存为图片文件或输出到流中。 4. 写入文件或输出流:调用`...

    JAVA生成二维码

    总的来说,生成二维码在Java中是一项实用的功能,通过引入第三方库如Zxing,我们可以轻松地将文本信息编码为二维码图片。这不仅有助于数据传输,还可以提升用户体验,特别是在移动设备上,用户可以通过扫描二维码...

    java环境变量配置工具_第二版

    1. 缺少jar包:确保所有必需的第三方库已添加到类路径中。 2. 访问权限:确保配置的路径没有权限问题。 3. 版本冲突:如果安装了多个Java版本,确认使用的命令对应正确的版本。 总之,Java环境变量配置是每个Java...

    文件夹监视

    在Java中,这个功能主要由`java.nio.file.FileSystemWatcher`类提供,它是Java 7引入的NIO.2框架的一部分。但是,由于其性能和稳定性的局限,开发者往往选择第三方库或者自定义实现来实现文件监视功能。 `...

    java语言程序设计基础篇第十版课后习题答案.zip

    2. **环境配置**:学习Java的第一步是安装JDK(Java Development Kit),并设置好环境变量,包括JAVA_HOME、PATH和CLASSPATH,以便于编译和运行Java程序。 3. **基础语法**:包括数据类型(基本类型如int、float,...

    Java实现文件格式转换代码实例

    如果你需要将转换后的文件上传到远程服务器,可以使用Java的内置`java.net`包或第三方库如Apache Commons Net。以下是一个基本的FTP上传示例: ```java import org.apache.commons.net.ftp.FTP; import org.apache....

    《Java程序设计》第一周学习总结 (2).docx

    2. **类的理解与PATH的作用**:类是Java面向对象编程的基本单位,它是创建对象的模板。PATH环境变量是操作系统用来查找可执行文件的路径,对于Java,它还包括了JVM寻找.class文件的路径。 3. **Java与C的联系**:...

    JDK API文档

    5. **NIO.2(New IO 2)**:虽然NIO.2是在JDK 7中正式推出的,但在1.6版本中已经可以看到一些预览功能,如FileChannel的映射和锁定,以及Path和Files类的部分实现,增强了I/O操作的灵活性和效率。 6. **改进的Swing...

    Java基础课件.zip

    12. **IO/NIO**:学习Java的I/O模型,包括传统的BufferedReader和PrintWriter,以及非阻塞的New IO(NIO)和NIO.2。 13. **反射**:允许程序在运行时检查类的信息并动态调用方法或访问字段。 14. **枚举**:了解...

    JDK 1.5 解压版(64位版)

    虽然NIO.2是在JDK 7中引入的,但JDK 1.5首次引入了非阻塞I/O(New I/O,NIO),它提供了一种更高效的方式来处理I/O操作,尤其是对于网络编程和大文件处理。 10. **JVM性能提升** JDK 1.5还带来了JVM的优化,包括...

    将某表示文件路径的字符串的文件名分离出文件路径

    例如,`java.nio.file.Path` 和 `java.nio.file.Paths` 类提供了更简洁和强大的API来处理文件路径。使用这些API可以更方便地解析、构建和操作文件路径。 #### 5.3 异常处理 在实际应用中,还需要考虑一些异常情况...

Global site tag (gtag.js) - Google Analytics