现在我们有一个需要,就是要比较两个文件的内容是否一样。如果文件的内容很少,找到两个文件的差异并不难,但是如果两个文件的内容很多,用肉眼就很难了。下面我们就用Java代码来实现这一功能
public class CompareFile {
public boolean isSameFile(String fileName1,String fileName2){
FileInputStream fis1 = null;
FileInputStream fis2 = null;
try {
fis1 = new FileInputStream(fileName1);
fis2 = new FileInputStream(fileName2);
int len1 = fis1.available();//返回总的字节数
int len2 = fis2.available();
if (len1 == len2) {//长度相同,则比较具体内容
//建立两个字节缓冲区
byte[] data1 = new byte[len1];
byte[] data2 = new byte[len2];
//分别将两个文件的内容读入缓冲区
fis1.read(data1);
fis2.read(data2);
//依次比较文件中的每一个字节
for (int i=0; i<len1; i++) {
//只要有一个字节不同,两个文件就不一样
if (data1[i] != data2[i]) {
System.out.println("文件内容不一样");
return false;
}
}
System.out.println("两个文件完全相同");
return true;
} else {
//长度不一样,文件肯定不同
System.out.println("文件内容不一样");
return false;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {//关闭文件流,防止内存泄漏
if (fis1 != null) {
try {
fis1.close();
} catch (IOException e) {
//忽略
e.printStackTrace();
}
}
if (fis2 != null) {
try {
fis2.close();
} catch (IOException e) {
//忽略
e.printStackTrace();
}
}
}
return false;
}
public static void main(String[] args) {
String fileName1="D:\\text\\name1.txt";
String fileName2="D:\\text\\name2.txt";
boolean sameFile = new CompareFile().isSameFile(fileName1, fileName2);
System.out.println(sameFile);
}
}
当两个文本文件中的内容相同时,运行结果如下
image当两个文本文件中的内容不完全相同时,运行结果如下
image不过有一点需要注意的是,空格和换行也是比较差异的地方
网友评论