【问题标题】:JAVA program for 2 or more text files comparing用于比较 2 个或更多文本文件的 JAVA 程序
【发布时间】:2016-07-04 13:57:33
【问题描述】:

我想比较 2 个或更多文本文件以查找重复条目。 O/P 应该说文件中的那些行是否匹配。

我想将 File 1 的每一行与 File 2 的所有行进行比较(即,将 File 1 的 line-1 与 File 的所有行进行比较2)。 当我运行以下代码时,将文件 1 的第 1 行与文件 2 的所有行进行比较,然后程序被终止。

注意:我尝试了 Danail Alexiev 的想法(见答案)但循环无限运行,(也没有跳到文件 1 的 2 行,无限在文件 1 的第 1 行上循环文件 2 的所有行)

以下文件

文件1:内容

21321sc231231a23d1a32df1adfsdfsdfsd
fsdfs4dfs
dfsdf
3sd1f
sdfs4df3s 
df0 
sd4f 
sdf 
sdf1 
3sdf 
sdfs4df6s 
fs1df 
3sdfsd 
fs.d1f 
s3d1
sdf1s 
df1 
sdf1sdf

文件 2:内容

21321sc231231a23d1a32df1adfsdfsdfsd
fsdfs4dfs
dfsdf
3sd1f
sdfs4df3s 
df0 
sd4f 
sdf 
sdf1 
3sdf 
sdfs4df6s 
fs1df 
3sdfsd 
fs.d1f 
s3d1
sdf1s 
df1 
sdf1sdf

代码:

while ((sCurrentLine1 =file1.readLine()) != null )
 {
  while ((sCurrentLine2 =file2.readLine()) != null )
   {
    if(sCurrentLine1.equalsIgnoreCase(sCurrentLine2))
     {
      System.out.println("=---Matched----=" + sCurrentLine1 + " -->" + sCurrentLine2);
     }
     else
     {
      System.out.println("=---Not Matched----=" + sCurrentLine1 + " -->" + sCurrentLine2);
     }
    }
  }

O/P

=---匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->1321sc231231a23d1a32df1adfsdfsdfsd =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->fsdfs4dfs =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->dfsdf =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->3sd1f =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdfs4df3s =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->df0 =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sd4f =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf1 =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->3sdf =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdfs4df6s =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->fs1df =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->3sdfsd =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->fs.d1f =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->s3d1 =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf1s =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->df1 =---不匹配----=1321sc231231a23d1a32df1adfsdfsdfsd -->sdf1sdf

【问题讨论】:

  • 因此,您从第一个文件中读取第一行,然后将其与第二个文件中的每一行进行比较。然后你继续到第一个文件的第二行并将它与...进行比较...什么?您已经到达第二个文件的末尾。
  • 您将 file1 的第一行与 file2 的每一行进行比较。自然,第一个比较返回“匹配”,而其他比较不返回。
  • 请用示例更新您的问题。为 File1 和 File2 提供一个简单的示例,以及您希望在比较过程中发生什么。我认为我们都很难理解您要完成的工作
  • 更新了问题

标签: java file compare filecompare


【解决方案1】:

您将第二个文件的每一行与第一个文件的每一行进行比较。

为了进行正确的比较,您必须检查匹配的行号。

将你的while循环改为:

while (((sCurrentLine1 = file1.readLine()) != null) && ((sCurrentLine2 = file2.readLine()) != null) {
    // your comparison
}

请务必检查以检测文件具有不同行数的情况。

编辑:

经过 OP 的澄清,我想我知道问题所在了。

您正在尝试读取文件。当您将 File1 中的第一行与 File2 中的所有行进行比较时,嵌套的 while 循环将停止,因为您已经读取了文件中的所有行,readLine() 每次都会返回null

要解决此问题,您需要提前读取 File2 中的所有行,并使用它们与 File1 的行进行比较。

【讨论】:

  • 感谢您的回复,但我正在尝试使用 FILE2 行检查 FILE1 的每一行。我尝试了上面的代码,它将比较文件的每一行,例如 (line 1--> line1, line 2--> line2) 但我想比较 -- file1 的 line1 与文件 2 的所有行,file1 的第 2 行file2..etc 的所有行...
  • 那么你得到了正确的结果。第 1 行显然与文件 2 中的任何其他行都不匹配。您的问题到底是什么?
  • Mmm.... 我将比较 2 个 diff 文件,这将有 2 个 diff 文本集。所以我想比较文本文件是否有任何重复考虑文件有 10 行,文件 2 有 20 行(像文件 1 第二行在文件 2 第 15 行或第 16 行中重复),当我对第一行正确尝试了 chking(对所有行进行重复检查)但停止循环而不用文件 2 行检查文件 1 中的其他行
【解决方案2】:
public void CompareFileMain()
{
   /*int tempvar = 0;
   int tempvar1 =0 ;*/
   String Tlines1[] = new String [100];
   String Tlines2[] = new String [100];
   String tempstring1 = null;
   String tempstring2 = null;
   int file1lines;
   int file2lines ;
   System.out.println(file1lines = linesOffile1());
   System.out.println(file2lines = linesOffile2());
   try {
    file1 = new BufferedReader(new FileReader(SOAPFile));
    file2 = new BufferedReader(new FileReader(RestFile));
    int oplines = 1;
    while ((sCurrentLine1 =file1.readLine()) != null ) 
    {
        tempstring1 = sCurrentLine1;
        while ((sCurrentLine2 =file2.readLine()) != null )
        {
               tempstring2 = sCurrentLine2;
                }
        if ((sCurrentLine2 =file2.readLine()) == null)
        {
           System.out.println("File 1 --> line# "+oplines +"\t");
           CompareFileSub(tempstring1, tempstring2);
        }
        oplines = oplines+1;
    }
        } catch (IOException e) {
        e.printStackTrace();
        }
}
public void CompareFileSub(String t1, String t2) throws IOException  // reading file 2 
{
  file2 = new BufferedReader(new FileReader(RestFile));
  int oplines = 1;
  while ((sCurrentLine2 =file2.readLine()) != null )
  {
    t2 = sCurrentLine2;
    if((t1.contains(t2) && (t2.contains(t1))))
    {
          System.out.print(t1+"-->"+t2+"---->matched \t");
          System.out.println("File 2 --> line# "+oplines +"\n");
    }
    else
    {
          System.out.print(t1+"-->"+t2+"---->not matched \t");
          System.out.println("File 2 --> line# "+oplines +"\n");
    }
              oplines = oplines+1;
 }
}

public int linesOffile1() //Count file 1 lines
{
  try {
    while ((sCurrentLine1 =file1.readLine()) != null )
    {
        //System.out.println("Taken line sCurrentLine1 "+sCurrentLine1);
        //System.out.println("Taken line sCurrentLine1 "+i);
        i=i+1;
    }                                   
        } catch (IOException e) {
            e.printStackTrace();
            }
   finally {
    try {
           if (file1 == null)file1.close();
         } catch (IOException ex) {
                ex.printStackTrace();
                }
    }
   return i;

}      
public int linesOffile2() //Count file 2 lines
{
  try {
    while ((sCurrentLine2 =file2.readLine()) != null )
    {   
    //System.out.println("Taken line sCurrentLine2 "+sCurrentLine2);
    //System.out.println("Taken line sCurrentLine2 "+j);
    j=j+1;
    }
        } catch (IOException e) {
            e.printStackTrace();
            }   
  finally {
    try {
        if (file2 == null)file1.close();
    } catch (IOException ex) {
            ex.printStackTrace();
            }
    }
 return j;
}      

输入:

文件1:

java
c++

test
stack
test
overflow
extraLine

文件2:

stack
overflow
test
java
c++

test

输出

8
7
File 1 --> line# 1  
java-->stack---->not matched    File 2 --> line# 1

java-->overflow---->not matched     File 2 --> line# 2

java-->test---->not matched     File 2 --> line# 3

java-->java---->matched     File 2 --> line# 4

java-->c++---->not matched  File 2 --> line# 5

java-->---->not matched     File 2 --> line# 6

java-->test---->not matched     File 2 --> line# 7

File 1 --> line# 2  
c++-->stack---->not matched     File 2 --> line# 1

c++-->overflow---->not matched  File 2 --> line# 2

c++-->test---->not matched  File 2 --> line# 3

c++-->java---->not matched  File 2 --> line# 4

c++-->c++---->matched   File 2 --> line# 5

c++-->---->not matched  File 2 --> line# 6

c++-->test---->not matched  File 2 --> line# 7

File 1 --> line# 3  
-->stack---->not matched    File 2 --> line# 1

-->overflow---->not matched     File 2 --> line# 2

-->test---->not matched     File 2 --> line# 3

-->java---->not matched     File 2 --> line# 4

-->c++---->not matched  File 2 --> line# 5

-->---->matched     File 2 --> line# 6

-->test---->not matched     File 2 --> line# 7

File 1 --> line# 4  
test-->stack---->not matched    File 2 --> line# 1

test-->overflow---->not matched     File 2 --> line# 2

test-->test---->matched     File 2 --> line# 3

test-->java---->not matched     File 2 --> line# 4

test-->c++---->not matched  File 2 --> line# 5

test-->---->not matched     File 2 --> line# 6

test-->test---->matched     File 2 --> line# 7

File 1 --> line# 5  
stack-->stack---->matched   File 2 --> line# 1

stack-->overflow---->not matched    File 2 --> line# 2

stack-->test---->not matched    File 2 --> line# 3

stack-->java---->not matched    File 2 --> line# 4

stack-->c++---->not matched     File 2 --> line# 5

stack-->---->not matched    File 2 --> line# 6

stack-->test---->not matched    File 2 --> line# 7

File 1 --> line# 6  
test-->stack---->not matched    File 2 --> line# 1

test-->overflow---->not matched     File 2 --> line# 2

test-->test---->matched     File 2 --> line# 3

test-->java---->not matched     File 2 --> line# 4

test-->c++---->not matched  File 2 --> line# 5

test-->---->not matched     File 2 --> line# 6

test-->test---->matched     File 2 --> line# 7

File 1 --> line# 7  
overflow-->stack---->not matched    File 2 --> line# 1

overflow-->overflow---->matched     File 2 --> line# 2

overflow-->test---->not matched     File 2 --> line# 3

overflow-->java---->not matched     File 2 --> line# 4

overflow-->c++---->not matched  File 2 --> line# 5

overflow-->---->not matched     File 2 --> line# 6

overflow-->test---->not matched     File 2 --> line# 7

File 1 --> line# 8  
extraLine-->stack---->not matched   File 2 --> line# 1

extraLine-->overflow---->not matched    File 2 --> line# 2

extraLine-->test---->not matched    File 2 --> line# 3

extraLine-->java---->not matched    File 2 --> line# 4

extraLine-->c++---->not matched     File 2 --> line# 5

extraLine-->---->not matched    File 2 --> line# 6

extraLine-->test---->not matched    File 2 --> line# 7

得到了解决方案,谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多