如何使用类路径指定Spring项目中文件的位置?
这就是我目前的情况:
FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
这是我的桌面硬编码。我想要的是能够使用我的项目中的文件的路径。
FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");
有什么建议吗?
答案 0 :(得分:37)
我们是在谈论标准java.io.FileReader
吗?不行,但没有它就不难。
/src/main/resources
maven目录内容放在CLASSPATH的根目录中,因此您只需使用以下命令检索它:
InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");
如果结果不是null
(找不到资源),请随意将其包装在阅读器中:
Reader reader = new InputStreamReader(is);
答案 1 :(得分:9)
来自similar question中@NimChimpsky的回答:
Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();
使用ClassPathResource和界面Resource。并确保正确添加资源目录(将/src/main/resources/
添加到类路径中)。
请注意,资源有一种获取java.io.File
的方法,因此您也可以使用:
Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());
答案 2 :(得分:5)
Spring有org.springframework.core.io.Resource,它是为这种情况而设计的。从context.xml可以将classpath传递给bean
<bean class="test.Test1">
<property name="path" value="classpath:/test/test1.xml" />
</bean>
你可以在你的bean中获得它作为资源:
public void setPath(Resource path) throws IOException {
File file = path.getFile();
System.out.println(file);
}
输出
D:\workspace1\spring\target\test-classes\test\test1.xml
现在您可以在新的FileReader(文件)中使用它
答案 3 :(得分:0)
看起来你有maven项目,所以资源在classpath中
去寻找
getClass().getResource("classpath:storedProcedures.sql")