当你需要通过从一个文件位置到另一个文件位置构建 Path 对象的时候,你可以调用 relativize() 方法,这个方法将通过这两个位置之间的关系来构建 Path 对象。调用这个方法的 Path 对象称为原始路径,传入这个方法的 Path 对象称为传入路径。最后得到的 Path 对象是相对于原始路径的相对路径。为了更好地理解,下面用几个简单的例子来说明,假设有下面两个路径:
Path path01 = Paths.get("BNP.txt");
Path path02 = Paths.get("AEGON.txt");
在这个例子中,假设 BNP.txt 和 AEGON.txt 在相同目录下,这意味着这两个文件都可以通过向上一级得到双方共同的目录,再向下一级通过对方文件名来导航到对方。那么调用 relativize() 方法应该输出 ..\AEGON.txt 和 ..\BNP.txt:
//output: ..\AEGON.txt
Path path01_to_path02 = path01.relativize(path02);
System.out.println(path01_to_path02);
//output: ..\BNP.txt
Path path02_to_path01 = path02.relativize(path01);
System.out.println(path02_to_path01);
再来看看另外的例子:
Path path01 = Paths.get("/tournaments/2009/BNP.txt");
Path path02 = Paths.get("/tournaments/2011");
这个例子中的两个 Path 对象都在 /tournaments 根目录下。要从 path01 导航到 path02 可以通过向上两级再向下一级(..\..\2011),要从 path02 导航到 path01 可以通过向上一级再向下两级(..\2009\BNP.txt),下面可以看到 relativize() 是如何输出的:
//output: ..\..\2011
Path path01_to_path02 = path01.relativize(path02);
System.out.println(path01_to_path02);
//output: ..\2009\BNP.txt
Path path02_to_path01 = path02.relativize(path01);
System.out.println(path02_to_path01);
注意:如果有一个路径中包含根元素,那么两个路径都必须包含根元素,否则无法创建关联 Path 对象,系统会抛异常。
文章来源:
http://www.aptusource.org/2014/03/constructing-a-path-between-two-locations/
分享到:
相关推荐
根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...
4. **FileInputStream和FileOutputStream的使用**:使用这两个类可以读写二进制文件,如图片、音频或视频文件。`read()`方法用于读取单个字节,`write()`方法用于写入单个字节。 5. **FileChannel**:`java.nio....
3. **java.nio.file包**:Java 7引入了NIO.2,提供了更强大和灵活的文件操作API,如Files类和Paths类,可以方便地进行文件读写、遍历目录等操作。 4. **使用第三方库Zip4j**:标签中提到了“Zip4jExamples”,这...
5. **文件系统API增强**:NIO.2引入了新的`java.nio.file`包,提供了对文件系统更全面的访问和控制,支持文件的遍历、属性查询和异步I/O操作。 6. **Fork/Join框架**:这是Java并发处理的一个重要改进,它允许将大...
JDK 7是Java平台标准版(Java SE)的第七个主要版本,它的更新版本7u67包含了自JDK 7发布以来的一些重要修复和改进。以下是JDK 7u67中的关键特性: 1. **动态语言支持**:JDK 7引入了 invokedynamic 字节码指令,这...
通过结合这两个功能,可以构建出强大的文件同步系统,用于实时更新远程服务器上的文件,确保数据的一致性和可用性。在实际开发中,根据具体需求,可能需要对这些基础示例进行扩展和优化,例如增加多线程处理、性能...
1. **Swing 或 JavaFX**:这两个库提供了丰富的组件来构建桌面应用。例如,`JFrame`用于创建窗口,`JList`或`TreeView`用于显示文件和目录,`JButton`用于执行操作,如打开、复制、移动和删除文件。 2. **文件和...
【标题】"jdk-7u80-windows-x64.zip" 指的是Java Development Kit (JDK) 的第7个版本更新80,适用于64位Windows操作系统的压缩文件。这个版本是Oracle公司发布的,用于开发和运行Java应用程序的重要工具集。 【描述...
10. **Java Swing和JavaFX**:这两个是Java的图形用户界面(GUI)库,用于构建桌面应用。 11. **数据库连接**:Java通过JDBC(Java Database Connectivity)接口连接各种关系型数据库,执行SQL语句,处理结果集。 ...
在Java中,文件和目录操作主要通过`java.io`和`java.nio`这两个包提供的类来完成。`java.io`包包含了一些基本的I/O流类,如`File`,它提供了对文件和目录的基本操作,如创建、删除、重命名等。而`java.nio`包引入了...
这两个类用于在不同线程间传递数据,常用于构建管道模型。 以上就是Java IO工具类的详细介绍,理解并熟练运用这些工具,将极大提升你在处理数据输入输出时的效率和灵活性。在实际编程中,根据需求选择合适的工具类...
16. **Java Swing和JavaFX**:这两个是Java的图形用户界面(GUI)库,用于构建桌面应用程序。 17. **Java注解**:注解提供了一种元数据,可以用于编译时或运行时对代码进行处理,例如Spring框架中的依赖注入。 18....
- **路径处理**:在Java中,可以通过构建路径字符串或使用`java.nio.file.Path`类来处理文件路径。 ### 字符串操作 #### 问题6 **题目描述:** 提供了一段代码,使用`System.out.printf`打印圆周率π和自然对数e的...
2. **环境配置**:学习Java的第一步通常是安装Java Development Kit (JDK),并设置好环境变量JAVA_HOME和Path,以便在命令行中运行Java编译器`javac`和解释器`java`。 3. **语法基础**:Java的基础语法包括变量声明...
在Windows、Mac OS或Linux系统上安装JDK后,通过设置环境变量PATH和JAVA_HOME,可以确保系统能找到Java工具。 三、Java语法基础 1. 数据类型:Java分为基本数据类型(如整型、浮点型、字符型、布尔型)和引用数据...
11. **Swing和JavaFX**:对于GUI编程,Java提供了Swing和JavaFX两个库,可以用于创建桌面应用程序的用户界面。 12. **JDBC数据库编程**:学习如何使用Java连接和操作数据库,包括数据库驱动、连接池、SQL语句的执行...
这个API支持HTTP/2和WebSocket,提供了异步和同步两种操作模式,便于开发者构建网络应用。 3. **文本块(JEP 326)**: 为了解决多行字符串的繁琐引用问题,JDK 11引入了文本块(Text Blocks)语法,它可以更方便地...
Java的I/O系统包括文件操作、网络通信等,主要涉及File类、InputStream/OutputStream流、Reader/Writer字符流以及NIO(New IO)库。 八、多线程 Java内置了对多线程的支持,通过Thread类或实现Runnable接口可以创建...
**:学习任何编程语言的第一步通常是编写第一个程序,对于Java来说,就是打印"Hello, World!"。这将让你了解如何创建类、主函数以及输出语句。 3. **数据类型**:Java支持两种数据类型:基本类型(如int、char)和...