我有兩個包含信息的屬性文件。我想分辨他們是否相同。但是,在屬性文件中,除非您指定要輸出的順序,否則它們將以不同的順序寫入文件。我沒有訪問這些文件的代碼。我如何檢查他們的內容是否相同?如何在不考慮行順序的情況下區分兩個不同的文本文件?
例如,
File1 File2
a e
b c
c a
d d
e b
我怎樣才能檢測到這兩個文件是一樣的嗎? a-e表示信息串
謝謝!
我有兩個包含信息的屬性文件。我想分辨他們是否相同。但是,在屬性文件中,除非您指定要輸出的順序,否則它們將以不同的順序寫入文件。我沒有訪問這些文件的代碼。我如何檢查他們的內容是否相同?如何在不考慮行順序的情況下區分兩個不同的文本文件?
例如,
File1 File2
a e
b c
c a
d d
e b
我怎樣才能檢測到這兩個文件是一樣的嗎? a-e表示信息串
謝謝!
你已經接受了一個答案,不過我會加上這個,只是指出有一個更簡單的方法(假設你正在談論普通的Java屬性文件)。
你其實並不需要做任何分揀,行由行比較等自己,因爲equals()方法中java.util.Properties
已經巧妙地實現,確實一個可以預料到的。換句話說,就像Joshua Bloch說的那樣,「know and use the libraries」。 :-)
下面是一個例子。由於文件p1.properties
:
a = 1
b = 2
和p2.properties
:
b = 2
a = 1
...你可以閱讀他們,並與他們比較的equals():
Properties props1 = new Properties();
props1.load(new FileReader("p1.properties"));
Properties props2 = new Properties();
props2.load(new FileReader("p2.properties"));
System.out.println(props1.equals(props2)); // true
排序內容,然後逐行比較。
閱讀他們,對他們進行排序,然後通過他們並排運行並進行比較。順便說一下,排序可以通過將它們插入排序的數據結構來完成。
你能做到這一點的命令行。你的兩個文件是File1和File2。
$排序File1中> sorted_File1
$排序文件2> sorted_File2
,然後使用diff實用程序等MELD(這是圖形diff程序)。
$合併sorted_File1 sorted_File2
同樣,註釋和空行被忽略,因爲在格式差異(X = AA相對於X = 「AA」)這個方法保證。 – 2010-11-21 16:56:02
+1 - 這是比我更好的答案(我是從一個通用的角度回答的,因爲我現在每天都用C++而不是Java編寫) – 2010-11-21 16:56:55