昨天因为要帮师兄的忙所以看了一下如何判断两个文件内容是否相同,在这里提一下其实有很专业的工具如winmerge等,不过自己实现一下有助于学习和知识面的扩展。
第一,判读MD5值或SHA-1,以MD5为例,
// 计算文件的 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();
}
}
}
第二,直接判读内容,代码如下:
- public class IOOperation
- {
- public static void main(String[] args)
- {
- FileInputStream File1 = null;
- FileInputStream File2 = null;
- BufferedReader in = null;
- String sFile;
- if(args.length != 2)
- {
- System.out.println("The command line should be: java IOOperation testX.txt testX.txt");
- System.out.println("X should be one of the array: 1, 2, 3");
- System.exit(0);
- }
- try
- {
- File1 = new FileInputStream(args[0]);
- File2 = new FileInputStream(args[1]);
- try
- {
- if(File1.available() != File2.available())
- {
- //长度不同内容肯定不同
- System.out.println(args[0] + " is not equal to " + args[1]);
- }
- else
- {
- boolean tag = true;
- while( File1.read() != -1 && File2.read() != -1)
- {
- if(File1.read() != File2.read())
- {
- tag = false;
- break;
- }
- }
- if(tag == true)
- System.out.println(args[0] + " equals to " + args[1]);
- else
- System.out.println(args[0] + " is not equal to " + args[1]);
- }
- }
- catch(IOException e)
- {
- System.out.println(e);
- }
- }
- catch (FileNotFoundException e)
- {
- System.out.println("File can't find..");
- }
- finally
- {
- try
- {
- if(File1 != null)
- File1.close();
- if(File2 != null)
- File2.close();
- }
- catch (IOException e)
- {
- System.out.println(e);
- }
- }
- }
- }