web-dev-qa-db-ja.com

リソースフォルダーからファイルを取得する方法。 Spring Framework

私は私の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)

これが私の構造です:

enter image description here

リソースフォルダーからファイルを取得できないのはなぜですか?ありがとう。

アップデート。

リファクタリング後、

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 /を見つけようとしますが、そこにフォルダを追加しましたが、まだこのエラーが表示されます:(

enter image description here

19
Tom Wally

いくつかの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オブジェクトとその逆にマーシャリングする非常に優れたソリューションがあります...

45
jonashackt
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("fileName").getFile());
13
bearwithbeard

絶対パスを指定すると仮定します(そのため、リソースフォルダーがルートフォルダーである場合は、ローディング ´/´を追加します)。

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();
        }
    }
}
0
Raphael Roth