12

我有一行代码是:File file = new File(getFile())在java类中HandleData.java

方法 -getFile()获取属性的值fileName。并fileName通过 application_context.xml类的一个 bean 部分进行注入 - HandleData 如下:

 <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

虽然注入 aFile通常是首选方法,但您也可以利用 Spring 的 ResourceLoader 来动态加载资源。

通常,这就像将 注入ResourceLoaderSpring bean 一样简单:

@Autowired
private ResourceLoader resourceLoader;

然后从类路径加载:

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

由于OP是通过spring只注入文件名,还是想通过代码创建文件对象,你应该使用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 回答
3

你应该有:

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

它应该被注入org.springframework.core.io.Resource类似于这个答案

于 2013-03-08T15:35:41.053 回答