我想同时读取两个文件,然后同时比较他们的每一行,如果其中一行等于另一行则做一些处理,处理无关紧要,关键是我实现的时候有点问题,无法比较每一行,比如如下代码:FileReader reader1=new FileReader(filepath1);
FileReader reader2=new FileReader(filepath2);
BufferedReader in1=new BufferedReader(reader1);
BufferedReader in2=new BufferedReader(reader2); //创建两个FileReader对象和BufferedReader对象
int percentage=0; //这个是计算有多少行文本是相同的
do{
if((in1.readLine()).equals(in2.readLine())){ //如果两个BufferedReader对象读取的行内容一样则做一些处理
percentage+=1; //这里是处理
}
}while(in1.ready()&&in2.ready()); //当两个BufferedReader对象同时准备好读取时循环继续问题我估计就出在循环上,循环里是一下子读出了文本的全部内容去比较的而不是期望的一行一行去比较。可能是我的方法本身有问题,希望懂的人给点提示,谢谢了!
FileReader reader2=new FileReader(filepath2);
BufferedReader in1=new BufferedReader(reader1);
BufferedReader in2=new BufferedReader(reader2); //创建两个FileReader对象和BufferedReader对象
int percentage=0; //这个是计算有多少行文本是相同的
do{
if((in1.readLine()).equals(in2.readLine())){ //如果两个BufferedReader对象读取的行内容一样则做一些处理
percentage+=1; //这里是处理
}
}while(in1.ready()&&in2.ready()); //当两个BufferedReader对象同时准备好读取时循环继续问题我估计就出在循环上,循环里是一下子读出了文本的全部内容去比较的而不是期望的一行一行去比较。可能是我的方法本身有问题,希望懂的人给点提示,谢谢了!
public static void read(File aa, File bb) {
int count=0;
try {
List<String> aaList=FileUtils.readLines(aa);
List<String> bbList=FileUtils.readLines(bb);
HashMap<Integer, String> listMap=new HashMap<Integer, String>();
for (int i = 0; i < aaList.size(); i++) {
listMap.put(i, aaList.get(i));
}
for (int i = 0; i < bbList.size(); i++) {
if(listMap.containsValue(bbList.get(i))){
count++;
System.out.println(bbList.get(i)+" 相同"+" 第"+(i+1)+"行");
}
}
System.out.println("总共有"+count+"行相同");
} catch (IOException e) {
e.printStackTrace();
}
}
如果文本大就不行,考虑其他的方法。
import java.io.FileReader;
import java.io.IOException;public class Test { public static void main(String[] args) throws IOException {
FileReader reader1=new FileReader(filepath2);
FileReader reader2=new FileReader(filepath2);
BufferedReader in1=new BufferedReader(reader1);
BufferedReader in2=new BufferedReader(reader2);
int percentage = 0;
String c1 = null;
String c2 = null;
while((c1 = in1.readLine()) != null && (c2 = in2.readLine()) != null){
if(c1.equals(c2)){
percentage++;
}
}
in2.close();
in1.close();
System.out.println(percentage);
}}
不过这样写有一个问题就是 如果实际中错了一行,比如你第一个文本最上面空了一行,应该结果就是0了。或许你说的这个现象就是这么造成的。