1

可能重复:
比较2个java语言文本文件的内容

我正在尝试在 android 应用程序中比较两个 .txt 文件的字符串。你能告诉我如何进行吗?我想在其中插入代码

try {
     URL url = new URL("httpurl");                             
     URLConnection ucon = url.openConnection();
     InputStream is = ucon.getInputStream();
     BufferedInputStream bis = new BufferedInputStream(is);
     ByteArrayBuffer baf = new ByteArrayBuffer(50);
     int current = 0;
     while ((current = bis.read()) != -1) {
           baf.append((byte) current);
     }

     FileOutputStream fos = new FileOutputStream("/mnt/sdcard/random.txt");
     fos.write(baf.toByteArray());
     fos.close();
} catch (IOException e) {
     Log.d("ImageManager", "Error: " + e);
}
4

2 回答 2

4

您不应该将整个文件读入内存然后进行比较!

您可以按块读取这两个文件,比较每个块对并在块不同时停止读取。此外,您应该为块重用内存缓冲区。

这种方法可以让您提前停止(有利于性能)并管理内存(因此您可以比较非常大的文件)

请记住,这是一个耗时的操作,因此您不应该在 UI 线程中执行此操作。为此使用AsyncTask 。

另外,我建议在读取文件之前比较文件大小。这非常快,并且可以在文件大小不同的情况下让您尽早停止(非常有利于性能)

于 2012-06-06T07:45:27.833 回答
2
       File dir = Environment.getExternalStorageDirectory();

       File yourFile1 = new File(dir, "path/to/the/file/inside/the/textfile1.txt");
       File yourFile2 = new File(dir, "path/to/the/file/inside/the/textfile2.txt");

       put the check for file exists ..........

       FileInputStream fstream1 = new FileInputStream(yourFile1 );  
       FileInputStream fstream2 = new FileInputStream(yourFile2 );  

     DataInputStream in1 = new DataInputStream(fstream1);  
      BufferedReader br1 = new BufferedReader(new InputStreamReader(in1));  

    DataInputStream in2 = new DataInputStream(fstream2);  
      BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));  

    String strLine1, strLine2;  
     boolean isSame = true;
    while ((strLine1 = br1.readLine()) && strLine2 = br2.readLine()) ) != null)   {  
          if(strLine1.equals(strLine2))  
               System.out.println(strLine1)
          else{                     //optional just try to optimize can remove
                  //not same 
                  isSame = false;
                   break;
                }  
    } 
于 2012-06-06T07:44:45.907 回答