12

次のコード行があります:File file = new File(getFile())Javaクラス内HandleData.java

メソッド -getFile()プロパティの値を取りますfileName。そして、以下のように、クラスの Bean セクションである HandleDatafileNameを介して注入さ application_context.xmlれます。

 <bean id="dataHandler" class="com.profile.transaction.HandleData">
 <property name="fileName" value="DataFile.xml"></property>
 </bean>

プロジェクトを正常にビルドし、 -DataFile.xmlが に存在することを確認しましたWEB-INF/classes。そして、HandleData.class はWEB-INF/classes/com/profile/transacon

しかし、実行すると filenotfound 例外がスローされます。絶対パスを挿入すると(C:\MyProjectWorkspace\DataProject\target\ProfileService\WEB-INF\classes\DataFile.xmlファイルが正常に見つかります)。

ファイルがクラスパスから取得されるように、挿入する適切なパスを特定するのに誰か助けてもらえますか?

4

3 に答える 3

38

一般にa の注入Fileが推奨されるアプローチですが、Spring の ResourceLoader を活用してリソースを動的にロードすることもできます。

ResourceLoader通常、これはSpring Bean にを注入するのと同じくらい簡単です。

@Autowired
private ResourceLoader resourceLoader;

次に、クラスパスからロードします。

resourceLoader.getResource("classpath:myfile.txt");
于 2014-11-12T18:14:39.810 に答える
3

あなたが持っている必要があります:

<property name="fileName" value="classpath:DataFile.xml" />

そして、この回答org.springframework.core.io.Resourceと同様に注入する必要があります

于 2013-03-08T15:35:41.053 に答える
3

OPはSpringを介してfileNameのみを注入しているため、コードを介してファイルオブジェクトを作成したい場合は、ClassLoadeerを使用してファイルを読み取る必要があります

これを試して

InputStream is =  HandleData.class.getClassLoader().getResourceAsStream(getFile()));

編集

ファイルを読み取るための残りのコードは次のとおりです。

BufferedInputStream bf = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bf);

while (dis.available() != 0) {
    System.out.println(dis.readLine());
}

編集 2

あなたはそれをファイルオブジェクトとして欲しいので、FileInputStreamを手に入れるために

これを試して

 FileInputStream fisTargetFile = new FileInputStream(new File(HandleData.class.getClassLoader().getResource(getFile()).getFile()));
于 2013-03-08T15:36:10.340 に答える