Java - 比较两个巨大的文本文件

时间:2016-11-10 02:34:44

标签: java arrays performance text-files

我正在尝试开发一个基本的java程序来比较两个巨大的文本文件并打印不匹配的记录。类似于SQL中的减号函数。但我没有得到预期的结果,因为即使两个文件都相同,所有记录都会被打印出来。还建议我这种方法在比较两个巨大的文本文件时是否具有性能效率。

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);  
                   }  
            }

        }
    }
}

1 个答案:

答案 0 :(得分:-1)

对于性能方面,您应该尝试匹配文件的大小。如果大小(以字节为单位)完全相同,则可能不需要比较它们。