Возможный дубликат:
Сравните содержимое двух текстовых файлов на языке 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);
}
Вы не должны читать целые файлы в памяти, а затем сравнивать их!
Вы можете читать оба файла поблочно, сравнивать каждую пар пар и прекращать чтение, если блоки разные. Также вы должны повторно использовать буфер памяти для блоков.
Этот подход дает вам раннюю остановку (хорошо для производительности) и управляет памятью (поэтому вы можете сравнивать очень большие файлы)
Помните, что это трудоемкая операция, поэтому вы не должны этого делать в потоке пользовательского интерфейса. Для этого используйте AsyncTask.
Кроме того, я бы рекомендовал сравнить размеры файлов перед чтением файлов. Это очень быстро и дает вам очень раннюю остановку, если файлы имеют разные размеры (очень хороши для производительности)
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;
}
}