私は私のXMLファイルを非整列化しようとしています:
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml")));
try {
is = new FileInputStream(file);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}
しかし、このエラーが発生します:Java.io.FileNotFoundException:null(No such file or directory)
これが私の構造です:
リソースフォルダーからファイルを取得できないのはなぜですか?ありがとう。
アップデート。
リファクタリング後、
URL url = this.getClass()。getResource( "/ xmlToParse/companies.xml");ファイルfile = new File(url.getPath());
エラーをより明確に見ることができます:
Java.io.FileNotFoundException:/content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml(そのようなファイルまたはディレクトリはありません)
WEB-INF/classes /を見つけようとしますが、そこにフォルダを追加しましたが、まだこのエラーが表示されます:(
いくつかのXMLファイルをテストクラスにロードしようとすると、同じ問題が発生しました。あなたの質問から示唆できるように、Springを使用する場合、最も簡単な方法は org.springframework.core.io.Resource -one Raphael Rot hを使用することです。
コードは本当に簡単です。タイプ org.springframework.core.io.Resource のフィールドを宣言し、 org.springframework.beans.factory.annotation.Value で注釈を付けるだけです:
@Value(value = "classpath:xmlToParse/companies.xml")
private Resource companiesXml;
必要なInputStreamを取得するには、単に呼び出します
companiesXml.getInputStream()
そして、あなたは大丈夫でなければなりません:)
しかし、許してください。1つ質問があります。なぜ、Springの助けを借りてXMLパーサーを実装したいのですか?多くの組み込みがあります:) Webサービスの場合、XMLをJavaオブジェクトとその逆にマーシャリングする非常に優れたソリューションがあります...
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("fileName").getFile());
絶対パスを指定すると仮定します(そのため、リソースフォルダーがルートフォルダーである場合は、ローディング ´/´を追加します)。
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
File file = new File(String.valueOf(this.getClass().getResource("/xmlToParse/companies.xml")));
try {
is = new FileInputStream(file);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}