我在java类File file = new File(getFile())
中有一行代码: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
,它会成功找到文件。)。
有人可以帮助确定要注入的正确路径,以便从类路径中获取文件吗?
答案 0 :(得分:36)
虽然注入File
通常是首选方法,但您也可以利用Spring的ResourceLoader动态加载资源。
通常,这就像将ResourceLoader
注入Spring bean一样简单:
@Autowired
private ResourceLoader resourceLoader;
然后从类路径加载:
resourceLoader.getResource("classpath:myfile.txt");
答案 1 :(得分:3)
你应该:
<property name="fileName" value="classpath:DataFile.xml" />
它应该以与this answer
类似的org.springframework.core.io.Resource
注入
答案 2 :(得分: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()));