Java判断两个路径对应的文件是否相同

今天遇到一个bug,查了一个小时才发现是文件路径比较出了问题:

比如有两个路径:D:\dir\..\a.txt和D:\a.txt。这两个路径写法虽然不同,但是很容易知道这两个路径指向的是同一个文件。如果我们使用Java的File去判断两个路径是否相同,判断如下:

File f1 = new File("D:\\dir\\..\\a.txt");
File f2 = new File("D:\\a.txt");
System.out.println(f1.getAbsolutePath().equals(f2.getAbsolutePath())); // false
try {
    System.out.println(f1.getCanonicalPath().equals(f2.getCanonicalPath()));// true
     } catch (IOException e) {
	e.printStackTrace();
     }

可以看到比较绝对路径时,它们的结果是不同的,但是比较标准路径是相同的。

我的项目中比较路径的地方比较多,但是以前没有注意到文件的路径比较还有这种差异。记录下来,便于记忆。以飨读者。

Java判断两个路径对应的文件是否相同,布布扣,bubuko.com

时间: 2024-12-20 17:21:28

Java判断两个路径对应的文件是否相同的相关文章

JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址

JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址 在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上1.可以在servlet的init方法里String path = getServletContext().getRealPath("/");这将获取web项目的全路径例如 :E:\eclipseM9\workspace\tree\tree是我web项目的根目录 2.你也可以随时在任意的class里调用this.getCla

java 判断两个时间相差的天数!

package com.datedaycha;     import java.text.SimpleDateFormat;     import java.util.Calendar;     import java.util.Date;     import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;     /*      * java 判断两个时间相差的天数     1.实现目标     输入:两

java 判断两个文件是否相同

使用java 如何判断两个文件是否相同呢? 我的做法是 (1)先比较两个文件内容的长度: (2)在长度相同的情况下,再比较两个文件的MD5值. [create md5]按钮用于记录source file的文件内容长度和MD5值. 运行主类:CheckSameApp package com.hw.main; import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt

Java中通过相对路径来定位文件

通常我们定位文件都是通过绝对路径进行定位,比如“F:/Java/bin/test/test.java”,这样的缺点就是,一旦项目文件移动,这些路径就完全失效. 所以,下面我们来介绍一种通过相对路径来定位文件的方法.我用的IDE是eclipse,项目路径下有src和bin文件夹分别存放,java的源代码和编译文件. 如图,我的工程名是project,在F盘的study目录下,包名是com.www,源文件是Test.java 我们知道,java的源文件编译后才能运行,也就是java运行的其实是Tte

Java判断两个对象是否相等的规则

Object类中的equals方法用于检测一个对象是否等于另外一个对象.在Object类中,这个方法将判断两个对象是否具有相同的引用.如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认操作也是合情合理的.然而对于多数类来说,这种判断并没有什么意义.例如,采用这种方式比较两个PrintStream对象是否相等就完全没有意义.然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的. 例如,如果两个雇员对象的姓名.薪水和雇佣日期都一样,就认为它们是

Java 判断两个对象是否相等

一.使用 == 与 equals == : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) equals() : 它的作用也是判断两个对象是否相等.但它一般有两种使用情况: 情况1:类没有覆盖equals()方法.则通过equals()比较该类的两个对象时,等价于通过"=="比较这两个对象. 情况2:类覆盖了equals()方法.一般,我们都覆盖equals()方法来两个对象的内容相等:若它们的

java判断两个时间相差得天数

方法一:通过Calendar类得日期比较,在这需要考虑闰年和平年,也要考虑跨年份 /** * date2比date1多的天数 * @param date1 * @param date2 * @return */ public static int differentDays(Date date1,Date date2) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.g

java判断两集合是否相同以及求取交集,并集,差集

业务中用时需要判断两集合是否相同,所有提供一个工具方法,使用set集合的特性(元素唯一): private Map<String,Set<Integer>> getCategoryApiId(Set<Integer> oldAuthSet , Set<Integer> newAuthSet){ Map<String,Set<Integer>> categoryApiId = new HashMap(); if (oldAuthSet!

java判断两个单链表是否相交

转载于:http://blog.csdn.net/happymatilian/article/details/47811161 思路: 链表分有环链表和无环链表,如果两个链表存在相交,则只有两种可能,两个链表都无环或者都有环. (1)如果链表都无环,则先判断链表的尾指针是否一样,如果不一样,则没有相交.如果一样,则找出两个链表的长度差,将两个链表从距离尾节点同样的距离进行扫描,如果相交,则必然有一处扫描节点相同.实例数据List1:1->2->3->4->5->6->7