2016-11-10 35 views
1

2つの巨大なテキストファイルを比較し、一致しないレコードを出力するための基本的なJavaプログラムを開発しようとしています。 SQLのマイナス関数に似ています。両方のファイルが同じであっても、すべてのレコードが印刷されるため、期待した結果が得られません。また、このアプローチが2つの巨大なテキストファイルを比較するためのパフォーマンス効率的であるかどうかを私に示唆しますJava - 2つの巨大なテキストファイルを比較する

import java.io.*; 

public class CompareTwoFiles { 
    static int count1 = 0 ; 
    static int count2 = 0 ; 

    static String arrayLines1[] = new String[countLines("\\Files_Comparison\\File1.txt")]; 
    static String arrayLines2[] = new String[countLines("\\Files_Comparison\\File2.txt")]; 

    public static void main(String args[]){ 
     findDifference("\\Files_Comparison\\File1.txt","\\Files_Comparison\\File2.txt"); 
     displayRecords(); 
    } 

    public static int countLines(String File){ 

     int lineCount = 0; 
     try { 
      BufferedReader br = new BufferedReader(new FileReader(File)); 
      while ((br.readLine()) != null) { 
       lineCount++; 
      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
      return lineCount; 
    } 

    public static void findDifference(String File1, String File2){ 
     String contents1 = null; 
     String contents2 = null; 
     try 
     { 
      FileReader file1 = new FileReader(File1); 
      FileReader file2 = new FileReader(File2); 
      BufferedReader buf1 = new BufferedReader(file1); 
      BufferedReader buf2 = new BufferedReader(file2); 

      while ((contents1 = buf1.readLine()) != null) 
      { 
       arrayLines1[count1] = contents1 ; 
       count1++; 
      } 

      while ((contents2 = buf2.readLine()) != null) 
      { 
       arrayLines2[count2] = contents2 ; 
       count2++; 
      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
} 



    public static void displayRecords() {  
     for (int i = 0 ; i < arrayLines1.length ; i++) {  
      String a = arrayLines1[i]; 
      for (int j = 0; j < arrayLines2.length; j++){ 
       String b = arrayLines2[j]; 
       boolean result = a.contains(b); 
        if(result == false){ 
         System.out.println(a); 
        } 
      } 

     } 
    } 
} 
+0

は 'A'と 'B' –

+0

の値をチェックし、なぜ質問は'外のmemory'でタグ付けされた検討しますか? –

+0

この質問からメモリー不足のタグを削除しました – jay

答えて

0

public static void displayRecords() { 

    for (int i = 0 ; i < arrayLines1.length && i < arrayLines2.length; i++) 
    {  
     String a = arrayLines1[i]; 
     String b = arrayLines2[i]; 

     if(!a.contains(b){ 
       System.out.println(a); 
     } 
    } 
-1

パフォーマンス上の理由から、ファイルのサイズを一致させる必要があります。サイズ(バイト数)がまったく同じ場合、それらを比較する必要はないかもしれません。あなたが埋め込まれたループに

を必要としない、あなたの説明に基づいて

+0

同じサイズの2つのファイルに同じ内容がない可能性があります。 – bane19

+0

私は実際にこのような応答を期待しています:)はい、ハッシュを使って比較することができますhttp://stackoverflow.com/questions/15441315/java-and-hash-algorithm-to-compare-files – zawhtut

+0

あなたの答えの答えのリンク。とにかく、クール。ありがとう:) – bane19

関連する問題