Сравнение строк текстовых файлов [дубликаты]

1

Возможный дубликат:
Сравните содержимое двух текстовых файлов на языке Java

Я пытаюсь сравнить строки из двух файлов.txt в приложении Android. не могли бы вы рассказать мне, как продолжить? я хочу вставить код в этот

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);
}
  • 0
    так что просто конвертируйте оба файла в строку и сравнивайте строки, используя equals ...
  • 0
    Вы хотите не сравнивать два файла, но найти часть текста, которая одинакова в обоих файлах?
Показать ещё 1 комментарий
Теги:

2 ответа

4

Вы не должны читать целые файлы в памяти, а затем сравнивать их!

Вы можете читать оба файла поблочно, сравнивать каждую пар пар и прекращать чтение, если блоки разные. Также вы должны повторно использовать буфер памяти для блоков.

Этот подход дает вам раннюю остановку (хорошо для производительности) и управляет памятью (поэтому вы можете сравнивать очень большие файлы)

Помните, что это трудоемкая операция, поэтому вы не должны этого делать в потоке пользовательского интерфейса. Для этого используйте AsyncTask.

Кроме того, я бы рекомендовал сравнить размеры файлов перед чтением файлов. Это очень быстро и дает вам очень раннюю остановку, если файлы имеют разные размеры (очень хороши для производительности)

  • 0
    +1 в моем новом ответе я пытаюсь сделать то же самое ... это правильно?
  • 1
    +1, чтение полных файлов за раз является излишним. Я не знаю, доступен ли он на Android, но у commons-io есть класс помощника для этого: commons.apache.org/io/apidocs/org/apache/commons/io/…
Показать ещё 2 комментария
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;
                }  
    } 
  • 1
    Выглядит хорошо Кроме того, я бы рекомендовал использовать AsyncTask для этой операции, чтобы избежать блокировки потока пользовательского интерфейса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню