比较两个具有不同内容的文本文件(对于text1中的每一行需要与text2中的每一行进行比较)

时间:2015-01-12 11:51:44

标签: java file loops

我正在尝试比较两个.txt文件(它们的内容),但是当我执行此代码时,我的应用程序进入一个时间循环。我想逐行比较。例如,在first.txt中,我有4行,在second.txt中我有10行。我想比较一下(来自first.txt):0 111 10 111 1(second.txt)和0 112 1(second.txt)。如您所见,它们具有不同的价值,但源和目标相同。 所以,从first.txt我可以比较second.txt超过1次。

任何人都可以纠正我的错误吗?

这是我的意思是: First.txt

source value target
0   111     1
0   222     2
0   333     3
0   444     4

Second.txt

source value target
0   111     1
0   222     2
0   333     3
0   444     4
1   555     1
2   987     1
0   112     1
0   223     2
0   334     3
0   445     4

这是我的代码:

        // create new reader for cs
        frCs = new FileReader("nodeCsArr.txt");
        lnrCs = new LineNumberReader(frCs);

        // create new reader for rs
        frRs = new FileReader("nodeRsArr.txt");
        lnRs = new LineNumberReader(frRs);

        System.out.println("------Read distance Current State-----");
        // read distance on Cs
        while((strCs=lnrCs.readLine())!=null){
            i=lnrCs.getLineNumber(); 
            //edited here
            System.out.println("snCs baris ke-: "+i);

            stateArray=strCs.split("\t");

            //kolomnya
            snCs= stateArray[0]; System.out.println("snCs: "+snCs);
            dCs= stateArray[1]; //System.out.println("dCs: "+dCs);
            tnCs = stateArray[2]; 
            NodeLength=dCs.length(); System.out.println("panjang= "+NodeLength);

            System.out.println("------Read distance Random State-----");
            // read distance on Rs
            if((strRs=lnRs.readLine())!=null){
                i=lnRs.getLineNumber();
                //edited here
                System.out.println("snRs baris ke-: "+i);

                stateArray=strRs.split("\t");

                //input array--starts opencl here
                snRs= stateArray[0]; System.out.println("snRs: "+snRs);
                dRs= stateArray[1]; //System.out.println("dRs: "+dRs);
                tnRs = stateArray[2];  

                if ((snCs.equals(snRs))&&(tnCs.equals(tnRs))) {
                    System.out.println("snCs= "+snCs+" tnCs= "+tnCs+" dcs= "+dCs);
                    System.out.println("snRs= "+snRs+" tnRs= "+tnRs+" drs= "+dRs);
                    dTot=0;
                    for (int j = 0; j < NodeLength; j++) {

                        if (dCs.toCharArray()[j]==dRs.toCharArray()[j]) {
                            difBit=0;    
                        }else{
                            difBit=1;
                        }
                        dTot=dTot+difBit;
                    }   
                    dist=dTot/NodeLength;
                    System.out.println("different bit= "+dTot);
                    System.out.println("distance= "+dist);  
                }
            }
        }
        //lnRs.close();

        lnrCs.close();`

2 个答案:

答案 0 :(得分:0)

我建议使用Scanner读取每一行,即:

import java.util.Scanner;
(...)
Scanner stdin = new Scanner(System.in);
String line = stdin.nextLine();

在两个循环中比较它们(1.A中的每一行,B中的每一行) - 从A获得第一行并与每个B行比较直到达到lineB.length,然后得到第二行frm A并比较来自B的每一行,从A ...获得下一行

答案 1 :(得分:0)

这是我的解决方案。我刚刚在ArrayList中逐行阅读了第一个文件(如果&#39;更长的&#39;或者更短的&#39;一个没关系)

然后我将逐行浏览第二个文件并比较这些行。

first.txt:

0   111
0   222
0   333
0   444

second.txt:

0   111
0   222
0   333
0   444
1   555
2   987

这里是代码(主要方法中的简单性:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class CompareFiles {

    public static void main(String[] args) {
        boolean same = true;
        Scanner in = null;

        try {
            in = new Scanner(new FileReader("first.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        ArrayList<String> firstLines = new ArrayList<String>();
        while (in.hasNextLine()) {
            firstLines.add(in.nextLine());
        }
        in.close();

        try {
            in = new Scanner(new FileReader("second.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        int counter = 0;
        while (in.hasNextLine()) {
            if (counter < firstLines.size()) {
                if (!((in.nextLine()).equals(firstLines.get(counter)))) {
                    same = false;
                    break;
                }
                counter++;
            } else {
                break;
            }
        }
        in.close();
        System.out.println(same);
    }
}

请记住,我只是从文件的开头检查文件是否相同。 所以: 一个 一个 和 一个 乙 一个 一个 会不一样的。这实际上取决于你如何定义平等。