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

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

        }
    }
}

最佳答案

根据您的解释,您不需要嵌入循环

考虑

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

关于Java - 比较两个巨大的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519130/

相关文章:

javascript - React Native如何将数据从javascript传递到java android

java - Android 中从 Arraylist<Byte> 到字节数组的转换

java - 尝试从java中的url中提取内容

python - 找到最小和最大像素的值

java - 事件处理程序有编译错误 : "local variables referenced from a lambda expression must be final"

Python - 将多个列表中的元素 append 在一起的不同技术的相对性能是什么?

java - 从 main 调用方法会抛出 NullPointerException

python - Python方式为一维数组中的每个元素在第三维创建新的二维数组

r - 将数据加载到 R 的最佳文件类型(速度方面)?

coldfusion - CF 从 7 迁移到 8,CF8 由于表锁而崩溃,但其他服务器仍在 7 上运行良好!