2013-03-08 32 views
7

文件我有一个行代码是:File file = new File(getFile())在Java类HandleData.java加载从classpath中

方法 - getFile()采取财产fileName的价值。而fileName通过application_context.xml与类的豆节注入 - 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它找到文件成功。)。

有人可以帮忙弄清楚注入的正确路径,以便从类路径中获取文件吗?

回答

3

你应该有:

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

,它应该是注入作为org.springframework.core.io.Resource类似this answer

+0

嗨你的意思的 Steer360 2013-03-08 15:54:56

+0

@ Steer360是的,好的。 – Lucas 2013-03-08 15:55:56

+0

我实际上已经尝试过,它将FileNotFoundException显示为classpath:无法找到DataFile.xml。 – Steer360 2013-03-08 15:57:25

2

由于OP被注入只有通过春天的文件名,还是想通过代码来创建文件对象, 你应该使用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())); 
+0

OP是通过弹簧注入只有fileName,他仍然希望通过代码 – Sudhakar 2013-03-08 15:38:47

+0

创建文件对象它引发错误 - 构造函数文件(URL)未定义 – Steer360 2013-03-08 15:56:16

+0

我想使用您的建议,并使用InputStream来代替。目前我传递fileName如下:FileInputStream fisTargetFile = new FileInputStream(new File(fileName));所以InputStream不适用于这件作品。 – Steer360 2013-03-08 16:21:13

26

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

一般来说,这很简单,只要注入ResourceLoader到您的Spring bean:

@Autowired 
private ResourceLoader resourceLoader; 

然后从classpath中加载:

resourceLoader.getResource("classpath:myfile.txt"); 
相关问题