为了不同的目的,你可以使用不同的方式来比较两个 Path 对象是否相等。
首先,你可以调用 Path.equals() 方法来进行判断,这个方法遵守 Object.equals() 方法规范。这个方法不会访问实际的文件系统,因此所比较的两个路径可以不用真实存在。这个方法也不会确认两个路径是否指向同一个文件。在一些操作系统中,比较两个路径的时候是大小写忽略的,而在有的系统中,比较两个路径又是大小写敏感的——这要具体情况具体考虑。
下面的例子演示了相对路径 Path 和绝对路径 Path 之间比较的结果,它们指向同一个文件,但是 equals() 结果为 false:
Path path01 = Paths.get("/rafaelnadal/tournaments/2009/BNP.txt");
Path path02 = Paths.get("C:/rafaelnadal/tournaments/2009/BNP.txt");
if(path01.equals(path02)){
System.out.println("The paths are equal!");
} else {
System.out.println("The paths are not equal!"); //true
}
有的时候,你可能想要判断两个 Path 对象是否指向同一个文件或文件夹。那么你可以调用 java.nio.File.Files.isSameFile() 方法来进行判断。这个方法的具体实现调用了 Path.equals() 来进行判断,如果返回 ture ,则这个方法返回 true ,如果返回 false ,则需要再做二次确认。值得注意的是,这个方法要保证文件是真实存在的,否则会抛出 IOException。
try {
boolean check = Files.isSameFile(path01, path02);
if(check){
System.out.println("The paths locate the same file!"); //true
} else {
System.out.println("The paths does not locate the same file!");
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
Path 对象实现了 Comparable 接口,因此可以调用 compareTo() 方法来比较两个 Path 对象。这个方法将会比较两个抽象路径的字典顺序,这在需要排序的时候会很有用。如果结果小于 0 ,表示当前 Path 对象的字典顺序小于方法参数中的 Path 对象的字典顺序,如果结果等于 0 ,表示两个 Path 对象的字典顺序相等,如果结果大于 0 ,表示当前 Path 对象的字典顺序大于方法参数中 Path 对象的字典顺序。下面是例子:
//output: 24
int compare = path01.compareTo(path02);
System.out.println(compare);
如果需要进行局部比较,可以调用 startsWith() 和 endsWith() 方法,就像下面例子中演示的一样,使用这两个方法可以判断当前 Path 对象开始于或结束于某个字符串:
boolean sw = path01.startsWith("/rafaelnadal/tournaments");
boolean ew = path01.endsWith("BNP.txt");
System.out.println(sw); //output: true
System.out.println(ew); //output: true
文章来源:
http://www.aptusource.org/2014/03/nio-2-comparing-two-paths/
分享到:
相关推荐
根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...
本篇文章将详细介绍两种常用的方法来检测Java程序中的文件编码:一是使用`cpdetector`第三方库,二是通过自定义的`EncodingDetect.java`工具类。 1. **cpdetector第三方库** `cpdetector`是一个开源的Java库,它...
这本书在第二版中对Java I/O进行了更新,涵盖了从Java 5到Java 8的最新发展,包括NIO.2(New I/O 2)框架的介绍。 1. **Java I/O基础**:书中首先介绍了Java I/O的基本概念,如流、缓冲区、字符编码和文件操作。流...
8. **Path和Files类**:`java.nio.file.Path`代表文件系统中的路径,`java.nio.file.Files`提供了一系列静态方法,方便进行文件操作,如创建、删除、读写文件,以及检查文件状态等。 9. **正则表达式处理文件名**:...
4. **多路复用器(NIO.2)**:引入了新的java.nio.file包,提供了一套更完善的文件I/O API,支持异步I/O操作和文件系统查询。 5. **改进的编译器(Project Coin)**:包含一系列小的语法改进,如类型推断的改进,...
1. **NIO.2(New IO 2.0)**:Java 7引入了NIO的第二个版本,提供了更强大、更灵活的I/O操作,例如Path类,用于处理文件路径,以及Files类,提供了一系列静态方法进行文件操作。 2. **try-with-resources**:这是一...
5. **文件系统API增强**:NIO.2引入了新的`java.nio.file`包,提供了对文件系统更全面的访问和控制,支持文件的遍历、属性查询和异步I/O操作。 6. **Fork/Join框架**:这是Java并发处理的一个重要改进,它允许将大...
2. `InputStreamReader` 和 `OutputStreamWriter`:这两个类是Java IO流中的关键角色,它们用于将字节流转换为字符流。在创建这些流对象时,可以指定要使用的字符编码。例如,`new InputStreamReader(inputStream, ...
4. **NIO.2**:引入了新的文件系统API,即Java NIO.2,提供了异步I/O操作,增强了文件操作的灵活性和效率。 5. **Web服务支持**:JDK 6对Java API for RESTful Web Services (JAX-RS)和Java API for XML Processing...
这份"J2SE资料"包含的两个PDF文件——"J2SE第一部分.pdf"和"J2SE第二部分.pdf",很可能是针对J2SE的全面学习教程,涵盖了从基础到高级的诸多主题。 首先,让我们探讨J2SE的基础知识。Java是一种面向对象的编程语言...
【Android大作业.zip】是一个包含了两个重要项目的压缩文件,这些项目是针对Android开发的学习与实践。根据提供的描述,我们可以深入探讨这两个项目所涉及的关键知识点。 ### 第1题:网络通信程序 这个项目要求在...
结合这两个功能,你可以在压缩文件夹后,对每个压缩的文件进行Base64编码。这可以通过在`zipFolder`方法中调用`encodeFileToBase64`并在每个文件被添加到ZIP流之前进行编码来实现。这样,你就可以同时完成文件夹的...
本压缩包文件"jdk1.7与1.8Linux.zip"包含了两个不同版本的JDK,分别是JDK 7u71和JDK 8u121,针对的是Linux操作系统。这两个版本的JDK在功能和性能上都有所差异,下面将详细介绍它们的特点和重要知识点。 **JDK 7u71...
UTF-16则用两个或四个字节表示一个字符。 在Java中,`java.nio.charset`包提供了一系列类用于处理和识别文件编码。最常用的类是`Charset`,它表示一种字符集,可以用来检测和转换文件的编码。例如,我们可以使用`...
3. **文件系统API增强**:NIO.2(New IO 2.0)提供了更强大、更易用的文件系统操作接口,如Path类、Files类和文件属性查询。 4. **try-with-resources**:这是一种语法糖,用于自动关闭实现了AutoCloseable接口的...
8. **第8章:输入/输出流**:涵盖I/O流的基本概念,如InputStream和OutputStream接口,以及FileInputStream、FileOutputStream、BufferedReader和PrintWriter等类的使用。 9. **第10章:集合框架**:介绍ArrayList...
16. **Java Swing和JavaFX**:这两个是Java的图形用户界面(GUI)库,用于构建桌面应用程序。 17. **Java注解**:注解提供了一种元数据,可以用于编译时或运行时对代码进行处理,例如Spring框架中的依赖注入。 18....
6. **NIO.2**:增加了对文件系统的新API,如Path类,提供了更强大的文件操作能力。 7. **改进的并发工具**:如Fork/Join框架,用于并行计算,以及新的CountDownLatch和CyclicBarrier。 8. **动态语言支持**:JSR 292...
"Java高手的文章合集"可能包含了更多高级主题,如反射、注解、Lambda表达式、流API、NIO.2、并发编程、Spring框架等,这些都是进阶Java开发者需要掌握的知识点。随着你对Java的深入学习,这些内容将帮助你提升技能,...