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

[NIO.2] 第八篇 比较两个 Path 对象

阅读更多
为了不同的目的,你可以使用不同的方式来比较两个 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/
0
0
分享到:
评论

相关推荐

    Pro Java 7 NIO.2.pdf

    根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...

    获取文件编码方式的两种方式(1.cpdetector第三方jar包,包含源码elipse项目;2.EncodingDetect.java工具类)

    本篇文章将详细介绍两种常用的方法来检测Java程序中的文件编码:一是使用`cpdetector`第三方库,二是通过自定义的`EncodingDetect.java`工具类。 1. **cpdetector第三方库** `cpdetector`是一个开源的Java库,它...

    Java I/O, 2nd Edition

    这本书在第二版中对Java I/O进行了更新,涵盖了从Java 5到Java 8的最新发展,包括NIO.2(New I/O 2)框架的介绍。 1. **Java I/O基础**:书中首先介绍了Java I/O的基本概念,如流、缓冲区、字符编码和文件操作。流...

    java处理各种文件代码

    8. **Path和Files类**:`java.nio.file.Path`代表文件系统中的路径,`java.nio.file.Files`提供了一系列静态方法,方便进行文件操作,如创建、删除、读写文件,以及检查文件状态等。 9. **正则表达式处理文件名**:...

    jdk-7u67-linux-x64.tar.gz

    4. **多路复用器(NIO.2)**:引入了新的java.nio.file包,提供了一套更完善的文件I/O API,支持异步I/O操作和文件系统查询。 5. **改进的编译器(Project Coin)**:包含一系列小的语法改进,如类型推断的改进,...

    java1.7源码包含sun

    1. **NIO.2(New IO 2.0)**:Java 7引入了NIO的第二个版本,提供了更强大、更灵活的I/O操作,例如Path类,用于处理文件路径,以及Files类,提供了一系列静态方法进行文件操作。 2. **try-with-resources**:这是一...

    jdk7jdk-7u65-windows-x64.rar

    5. **文件系统API增强**:NIO.2引入了新的`java.nio.file`包,提供了对文件系统更全面的访问和控制,支持文件的遍历、属性查询和异步I/O操作。 6. **Fork/Join框架**:这是Java并发处理的一个重要改进,它允许将大...

    java转码

    2. `InputStreamReader` 和 `OutputStreamWriter`:这两个类是Java IO流中的关键角色,它们用于将字节流转换为字符流。在创建这些流对象时,可以指定要使用的字符编码。例如,`new InputStreamReader(inputStream, ...

    jdk1.6_6u45

    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资料

    这份"J2SE资料"包含的两个PDF文件——"J2SE第一部分.pdf"和"J2SE第二部分.pdf",很可能是针对J2SE的全面学习教程,涵盖了从基础到高级的诸多主题。 首先,让我们探讨J2SE的基础知识。Java是一种面向对象的编程语言...

    Android大作业.zip

    【Android大作业.zip】是一个包含了两个重要项目的压缩文件,这些项目是针对Android开发的学习与实践。根据提供的描述,我们可以深入探讨这两个项目所涉及的关键知识点。 ### 第1题:网络通信程序 这个项目要求在...

    Java代码 可以压缩文件夹到指定目录和指定名称,将文件或者文件夹中的文件转成base64格式

    结合这两个功能,你可以在压缩文件夹后,对每个压缩的文件进行Base64编码。这可以通过在`zipFolder`方法中调用`encodeFileToBase64`并在每个文件被添加到ZIP流之前进行编码来实现。这样,你就可以同时完成文件夹的...

    jdk1.7与1.8Linux.zip

    本压缩包文件"jdk1.7与1.8Linux.zip"包含了两个不同版本的JDK,分别是JDK 7u71和JDK 8u121,针对的是Linux操作系统。这两个版本的JDK在功能和性能上都有所差异,下面将详细介绍它们的特点和重要知识点。 **JDK 7u71...

    java 获取文件编码

    UTF-16则用两个或四个字节表示一个字符。 在Java中,`java.nio.charset`包提供了一系列类用于处理和识别文件编码。最常用的类是`Charset`,它表示一种字符集,可以用来检测和转换文件的编码。例如,我们可以使用`...

    jdk-7u10-linux-x64.tar.gz

    3. **文件系统API增强**:NIO.2(New IO 2.0)提供了更强大、更易用的文件系统操作接口,如Path类、Files类和文件属性查询。 4. **try-with-resources**:这是一种语法糖,用于自动关闭实现了AutoCloseable接口的...

    java2实用教程(第3版)课件(ppt)

    8. **第8章:输入/输出流**:涵盖I/O流的基本概念,如InputStream和OutputStream接口,以及FileInputStream、FileOutputStream、BufferedReader和PrintWriter等类的使用。 9. **第10章:集合框架**:介绍ArrayList...

    Java 2实用教程(第五版张跃平例题代码)

    16. **Java Swing和JavaFX**:这两个是Java的图形用户界面(GUI)库,用于构建桌面应用程序。 17. **Java注解**:注解提供了一种元数据,可以用于编译时或运行时对代码进行处理,例如Spring框架中的依赖注入。 18....

    jdk-7u80-windows-x64.rar

    6. **NIO.2**:增加了对文件系统的新API,如Path类,提供了更强大的文件操作能力。 7. **改进的并发工具**:如Fork/Join框架,用于并行计算,以及新的CountDownLatch和CyclicBarrier。 8. **动态语言支持**:JSR 292...

    java初级教程

    "Java高手的文章合集"可能包含了更多高级主题,如反射、注解、Lambda表达式、流API、NIO.2、并发编程、Spring框架等,这些都是进阶Java开发者需要掌握的知识点。随着你对Java的深入学习,这些内容将帮助你提升技能,...

Global site tag (gtag.js) - Google Analytics