2010-11-21 36 views
4

我有兩個包含信息的屬性文件。我想分辨他們是否相同。但是,在屬性文件中,除非您指定要輸出的順序,否則它們將以不同的順序寫入文件。我沒有訪問這些文件的代碼。我如何檢查他們的內容是否相同?如何在不考慮行順序的情況下區分兩個不同的文本文件?

例如,

File1 File2 
a  e 
b  c 
c  a 
d  d 
e  b 

我怎樣才能檢測到這兩個文件是一樣的嗎? a-e表示信息串

謝謝!

回答

9

你已經接受了一個答案,不過我會加上這個,只是指出有一個更簡單的方法(假設你正在談論普通的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 
+1

同樣,註釋和空行被忽略,因爲在格式差異(X = AA相對於X = 「AA」)這個方法保證。 – 2010-11-21 16:56:02

+1

+1 - 這是比我更好的答案(我是從一個通用的角度回答的,因爲我現在每天都用C++而不是Java編寫) – 2010-11-21 16:56:55

1

排序內容,然後逐行比較。

3

閱讀他們,對他們進行排序,然後通過他們並排運行並進行比較。順便說一下,排序可以通過將它們插入排序的數據結構來完成。

-1

你能做到這一點的命令行。你的兩個文件是File1和File2。

$排序File1中> sorted_File1

$排序文件2> sorted_File2

,然後使用diff實用程序等MELD(這是圖形diff程序)。

$合併sorted_File1 sorted_File2

相關問題