本篇文章给大家谈谈java验证file是否一致,以及java 判断file是否存在对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、java比较2个文件是否是相同的文件,是一个一个字节比较还是计算MD5比较好啊?2、java如何判断俩个文件是否相同的?3、java 查询电脑磁盘某个文件夹中是否存在文件名相同的文件4、java如何快速比较两个文件是否相同5、如何用java判断两个文件下的txt文件内容一致与否6、如何用Java判断两个文件内容是否相同
java比较2个文件是否是相同的文件,是一个一个字节比较还是计算MD5比较好啊?
不同内容得出相同MD5值,虽然概率低,但总是不放心。如果在已知文件编码范围的条件下,找到MD5绝对区分长度范围(即:该范围内取样内容的MD5相同的,内容保证相同;绝不存在不同内容得出相同MD5值的现象),那么,可按合理的长度分片、按一定顺序遍历整个文件(属性信息、头部、尾部、同步随机点、其他),比较MD5,一旦有异立即判定文件不同,终止比较。这种分片取样比较MD5的思路可能快于逐字节比较也绝对可信
要确保 100%正确就必须校验全文,通过以上思路来比较,即是。
(注:
其他据说相对于MD5来讲不易碰撞(即不同内容得出相同MD5值的概率可能更低)的算法推荐:起码 SHA1 ,最好 SHA256、 SHA512、MD5+CRC32、HMAC,或者几种不同类型算法的同步进行。
在精通算法的情况下,将这里推荐的算法取代上文中提到的MD5来考量,能扩大绝对区分长度范围,可能更方便更快的比较。
但是又有这样的考虑:逐字节比较的算法最简单,算法弄复杂了反而会增加额余的时间;逐字节比较的算法也可以放到上文中来考量,进行同步取样和各种遍历的顺序与方式,说不定,在保证100%的可信度的条件下,逐字比较反而最快呢?
我觉得时间的耗费关键处在于,所有的算法,都要将两个位于不同区域或载体的文件的同位区域收集到一起进行比较,这个收集花费时间Ta(i),与取样长度、存储区域或载体等相关;{如果要将文件取很大一部或全部读入内存,然后再逐一集中比较,则会减小以上的Ta(i),而增加一个额外读入的时间Tc(i)*次数M(i)}。比较的次数大致为N(i);而如果在一个文件中顺序读取一个区域并且计算它的某个整体评定值,这个花费的时间为Tb(i),与取样长度、计算程序、设备性能等相关。
总体的比较时间大致是Ta(i)*N(i)*Tb(i)+{Tc(i)*M(i)}
逐字节比较,其中Tb(i)、Ta(i)都是最短的,但是N(i)最大,
总之,可以设计不同的算法,通过实际环境和文件的检测,来决定采用何种算法。
)
外一则:
两个取样内容, MD5等算法的计算值 不同,则内容一定不同; 计算值相同,则 内容可能相同,但可能性是否达到100%,内容相同的概率是多少,根据编码范围、算法来确定。如果是比较一个文件和许多其他文件是否相同,并且提前知道其他文件的 MD5 值,可先比较 MD5 值可以大大提高文件比较的速度。
java如何判断俩个文件是否相同的?
计算两文件的MD5值,如果MD5值一致表示一样。
public
static
String
getFileMD5(File
file)
{
if
(!file.isFile())
{
return
null;
}
MessageDigest
digest
=
null;
FileInputStream
in
=
null;
byte
buffer[]
=
new
byte[1024];
int
len;
try
{
digest
=
MessageDigest.getInstance(“MD5”);
in
=
new
FileInputStream(file);
while
((len
=
in.read(buffer,
0,
1024))
!=
-1)
{
digest.update(buffer,
0,
len);
}
in.close();
}
catch
(Exception
e)
{
e.printStackTrace();
return
null;
}
BigInteger
bigInt
=
new
BigInteger(1,
digest.digest());
return
bigInt.toString(16);
}
java 查询电脑磁盘某个文件夹中是否存在文件名相同的文件
当前电脑中同一个文件夹下是不允许有相同的文件的,如果是想查询某个文件夹下是否有某个文件是可以实现的。
可以通过File的exists方法进行查询是否匹配,如果存储就返回真,不存在返回假。
举例:
public static String fileExists(String filePath){
File file=new File(filePath);
if(!file.exists()) {
return “false”;//如果存在输出结果
} else{
return “true”;
}
}
备注:以上方法只需要传入“文件的路径+对应的文件名”(filePath),之后即可判断是否存在,如果循环判断,那么就多次调用此方法即可。
java如何快速比较两个文件是否相同
计算MD5或SHA-1,一样的就是同一个文件
下面的代码,不需要额外使用第三方组件,且支持超大文件
// 计算文件的 MD5 值
publicstatic String getFileMD5(File file) {
if (!file.isFile()) {
return null;
}
MessageDigest digest = null;
FileInputStream in = null;
byte buffer[] = newbyte[8192];
int len;
try {
digest =MessageDigest.getInstance(“MD5”);
in = new FileInputStream(file);
while ((len = in.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 计算文件的 SHA-1 值
publicstatic String getFileSha1(File file) {
if (!file.isFile()) {
return null;
}
MessageDigest digest = null;
FileInputStream in = null;
byte buffer[] = newbyte[8192];
int len;
try {
digest =MessageDigest.getInstance(“SHA-1”);
in = new FileInputStream(file);
while ((len = in.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
如何用java判断两个文件下的txt文件内容一致与否
请把问题描述的清楚点,“两个文件下的txt文件”这个让人费解。这么说吧,你的意思我大概明白,也都知道该怎么做,但是作为我的客户,我一定让你得到最满意的答案。这样,你按以下的目录填空:
两个文件名(包括路径):1、 2、
如果一致则出现什么结果:
不一致需要产生什么文件:
如何用Java判断两个文件内容是否相同
如果你维护这些文件列表,并且后期会不定期进行比较,也就是确定一个文件有多次被比较的机会。可以计算这些文件的MD5并缓存起来,后期直接用MD5进行比较。
如果只是临时性的随机选两个文件进行比较,可以先比较文件大小,如果文件大小不同就说明文件内容不相同。如果大小相等的话,可以打开这两个文件的输入流,字节逐一比较,如果中间有不相等的字节就说明两个文件不相等,然后直接退出比较,需要注意的是文件流要缓冲(BufferedInputStream)。
之所以不推荐MD5是因为MD5也需要根据文件全部内容计算散列值,可是实际上中途发现有一个字节不相同就可以判定这两个文件是不同的,根本没必要去读取文件的全部内容。
//in1,
in2为两个文件的输入流,最后注意流的关闭
int
c;
while
((c
=
in1.read())
!=
-1)
{
if
(in2.read()
!=
c)
return
false;
}
return
true;
java验证file是否一致的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 判断file是否存在、java验证file是否一致的信息别忘了在本站进行查找喔。