1

XMLUnitを使用して2つのXMLファイルを比較しようとしています。Eclipseで次のコードを試してみましたが、比較するxmlファイルをローカルディレクトリに配置しました。

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.List;

import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.Difference;
import org.xml.sax.SAXException;

public class ComparisonTest {

public static void main(String[] args) {
    URL url1 = ComparisonTest.class.getResource("D:/reference.xml");
    URL url2 = ComparisonTest.class.getResource("D:/comparison.xml");
    FileReader fr1 = null;
    FileReader fr2 = null;
    try {
        fr1 = new FileReader(url1.getPath());
        fr2 = new FileReader(url2.getPath());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    try {
        Diff diff = new Diff(fr1, fr2);
        System.out.println("Similar? " + diff.similar());
        System.out.println("Identical? " + diff.identical());

        DetailedDiff detDiff = new DetailedDiff(diff);
        List differences = detDiff.getAllDifferences();
        for (Object object : differences) {
            Difference difference = (Difference)object;
            System.out.println("***********************");
            System.out.println(difference);
            System.out.println("***********************");
        }

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

次のようなエラーが発生します

Exception in thread "main" java.lang.NullPointerException
at com.org.comparison.ComparisonTest.main(ComparisonTest.java:21)

理由がわからないのですか?

4

2 に答える 2

2

「D:/reference.xml」をリソースとして渡すことができるかどうかはわかりません。FileReader:のコンストラクターにパスを渡すだけです。

FileReader fr1 = null;
FileReader fr2 = null;
try {
    fr1 = new FileReader("D:/reference.xml");
    fr2 = new FileReader("D:/comparison.xml");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

私はそれgetResourceがあなたにnullを与えるとかなり確信しています。

URL url1 = ComparisonTest.class.getResource("D:/reference.xml");
URL url2 = ComparisonTest.class.getResource("D:/comparison.xml");
System.out.println(url1 + " " + url2); // I suppose output is "null null"
于 2013-02-04T13:24:56.897 に答える
0

getResource()メソッドが原因で、このエラーが発生します。参照オブジェクトをxmlファイルに返しません。ファイル名をFileReaderコンストラクタに直接渡すことも、Fileクラスオブジェクトを作成することもできます。私はあなたのコードブロックを改良しました、あなたはそれをコピーして実行することができます。100%動作します:) :)

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.List;

import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.Difference;
import org.xml.sax.SAXException;

public class ComparisonTest {

public static void main(String[] args) {
File f1 = new File("D:/reference.xml");
File f2= new File("D:/comparison.xml");
FileReader fr1 = null;
FileReader fr2 = null;
try {
    fr1 = new FileReader(f1);
    fr2 = new FileReader(f2);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

try {
    Diff diff = new Diff(fr1, fr2);
    System.out.println("Similar? " + diff.similar());
    System.out.println("Identical? " + diff.identical());

    DetailedDiff detDiff = new DetailedDiff(diff);
    List differences = detDiff.getAllDifferences();
    for (Object object : differences) {
        Difference difference = (Difference)object;
        System.out.println("***********************");
        System.out.println(difference);
        System.out.println("***********************");
    }

} catch (SAXException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
}

}

于 2014-01-31T09:16:57.310 に答える