2016-04-02 10 views
29

私はSpringブートアプリケーションを開発中です。私は開始時にXMLファイル(countries.xml)を解析する必要があります。問題は、私がアクセスできるようにどこに置くべきか分かりません。 私はNPEを取得し、スタックトレースは、私のファイルがあることを示している私のフォルダ構造は、私の最初のアイデアは、SRC /メイン/リソースでそれを置くためにSpringブートアクセス静的リソースにscr/main/resourcesがありません

ProjectDirectory/src/main/java 
ProjectDirectory/src/main/resources/countries.xml 

だったが、私はファイル(countries.xml)を作成しようとすると、 ProjectDirectoryを見ました(したがって、src/main/resources /は追加されません)。 File(resources/countries.xml)を作成しようとしましたが、パスはProjectDirectory/resources/countries.xmlのようになります(src/mainは追加されません)。

ノー結果

@Override 
public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    super.addResourceHandlers(registry); 
} 

でこれを追加しようとした私は、私は手動で/ src/mainにを追加することができます知っているが、私はそれが持っているとして、それが動作しない理由を理解したいです。私もResourceLoaderで例を試しました。同じ結果はありませんでした。

誰でも問題の原因を示唆することはできますか?

UPDATE:ちょうど将来の参照のための - プロジェクトをビルドした後、私は、ファイルにアクセスすると問題が発生したので、私はちょうど春のタイプClassPathResourceを使用

InputStream is = new ClassPathResource("countries.xml").getInputStream(); 
+0

このファイルをweb.xmlまたは任意の設定ファイルに追加して、アプリケーションに存在することを伝えますか? – LearningPhase

+0

このファイルをフォルダに追加するだけで、アプリケーションがファイルをスキャンするのに役立たない場合があります。 – LearningPhase

+0

web.xmlはありません私はJavaベースの設定を持っています。どうすればいいですか?多分あなたはサンプルを持っていますか?私はとても感謝しています!!! – lenach87

答えて

47

を入力ストリームにファイルを変更しました。

File file = new ClassPathResource("countries.xml").getFile(); 

このファイルがクラスパスのどこかにある限り、Springはそれを見つけます。これは、開発およびテスト中にsrc/main/resourcesにすることができます。プロダクションでは、現在の実行ディレクトリにすることができます。クラスパス内のファイルを取得するには

+0

ありがとうございました!これは本当に私を助けました!これは期待通りに動作します – lenach87

+0

このファイルをJSonObejctに変換する方法はありますか? (最初のデータはJSONオブジェクトです) – Kenji

+0

@luboskrnacの答えに追加するだけで、 'File file = new ClassPathResource("。\ countries.xml ")。getFile();' –

6

Resource resource = new ClassPathResource("countries.xml"); 
File file = resource.getFile(); 

は、ファイルを読み込むには、@PostConstructを使用onStartup:ここ

@Configuration 
public class ReadFileOnStartUp { 

    @PostConstruct 
    public void afterPropertiesSet() throws Exception { 

     //Gets the XML file under src/main/resources folder 
     Resource resource = new ClassPathResource("countries.xml"); 
     File file = resource.getFile(); 
     //Logic to read File. 
    } 
} 

は春ブートアプリケーションの起動時にXMLファイルを読み込むためのSmall exampleです。

+0

ありがとうございました!最初の部分は、あなたとluboskrnacが私を助けたと示唆しているように! – lenach87

+0

@ElenaChubukinaサンプルの例を見てください。あなたは起動時にXMLを解析する必要があると言った。 –

+0

ありがとう!ファイルを解析する部分が問題ではありませんでした(クラスパス上にファイルを見つける部分のみ) - 私はCommandLineRunnerを使用します。それは私のためにうまくいきます。 – lenach87

関連する問題