我想同时读取两个文件,然后同时比较他们的每一行,如果其中一行等于另一行则做一些处理,处理无关紧要,关键是我实现的时候有点问题,无法比较每一行,比如如下代码: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对象同时准备好读取时循环继续问题我估计就出在循环上,循环里是一下子读出了文本的全部内容去比较的而不是期望的一行一行去比较。可能是我的方法本身有问题,希望懂的人给点提示,谢谢了!

解决方案 »

  1.   

    我是LZ,上面的代码比如两个内容完全相同的文本则没什么问题,如果其中一个文本仅仅有某一行不同则会打印0,即循环里的if判断根本没做,所以我估计是他一下子全部读出来再去比较所以才会这样。不知道对不对?
      

  2.   

    自己顶自己吧,percentage表示相似的行数。谢谢!
      

  3.   

    你那样有点问题,如果2个文件行数一样就会多统计一次,或者给2个空文本,还会有一次。因为DO WHILE先执行后判断,建议用while或for循环用行数同时取第几行判断。
      

  4.   

    如果文本不大的话,你可以选择把文本用FileUtils.readLines(aa); 读出来放到内存中比较。
    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();
    }
    }
    如果文本大就不行,考虑其他的方法。
      

  5.   

    import java.io.BufferedReader;
    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);
    }}
      

  6.   

    程序应该没问题 直接写while就可以了,否则会比实际多1.
    不过这样写有一个问题就是 如果实际中错了一行,比如你第一个文本最上面空了一行,应该结果就是0了。或许你说的这个现象就是这么造成的。