java-diff-utilsライブラリを使用してみてください
例
Java ライブラリの簡単なデモには groovy を使用します。
2 つのサンプル ファイル間で次の相違点が報告されています。
$ groovy diff
[ChangeDelta, position: 0, lines: [1,11,21,31,41,51] to [1,11,99,31,41,51]]
[DeleteDelta, position: 2, lines: [3,13,23,33,43,53]]
[InsertDelta, position: 5, lines: [6,16,26,36,46,56]]
files1.csv
1,11,21,31,41,51
2,12,22,32,42,52
3,13,23,33,43,53
4,14,24,34,44,54
5,15,25,35,45,55
file2.csv
1,11,99,31,41,51
2,12,22,32,42,52
4,14,24,34,44,54
5,15,25,35,45,55
6,16,26,36,46,56
diff.groovy
//
// Dependencies
// ============
import difflib.*
@Grapes([
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.2.1'),
])
//
// Main program
// ============
def original = new File("file1.csv").readLines()
def revised = new File("file2.csv").readLines()
Patch patch = DiffUtils.diff(original, revised)
patch.getDeltas().each {
println it
}
アップデート
dbunit FAQによると、このソリューションのパフォーマンスは、ResultSetTableFactory インターフェイスのストリーミングされたリビジョンを使用することにより、非常に大きなデータセットに対して改善できます。これは、次のように ANT タスク内で有効にされます。
ant.dbunit(driver:driver, url:url, userid:user, password:pass) {
compare(src:"dbunit.xml", format:"flat")
dbconfig {
property(name:"datatypeFactory", value:"org.dbunit.ext.h2.H2DataTypeFactory")
property(name:"resultSetTableFactory", value:"org.dbunit.database.ForwardOnlyResultSetTableFactory")
}
}