34

如何使用类路径来指定 Spring 项目中文件的位置?

这是我目前拥有的:

FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");

这是硬编码到我的桌面的。我想要的是能够使用我项目中文件的路径。

FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");

有什么建议么?

4

4 回答 4

42

我们在谈论标准java.io.FileReader吗?不会工作,但没有它并不难。

/src/main/resourcesmaven 目录内容放置在 CLASSPATH 的根目录中,因此您可以使用以下方法简单地检索它:

InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");

如果结果不是null(找不到资源),请随意将其包装在阅读器中:

Reader reader = new InputStreamReader(is);
于 2012-11-26T19:48:21.173 回答
12

来自@NimChimpsky 在类似问题中的回答:

Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();

使用ClassPathResource和接口Resource。并确保您正确添加资源目录(添加/src/main/resources/到类路径中)。

请注意, Resource 有一种获取方法,java.io.File因此您也可以使用:

Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());
于 2016-04-27T16:43:41.303 回答
5

Spring 有 org.springframework.core.io.Resource 专为这种情况而设计。从 context.xml 您可以将类路径传递给 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

现在您可以在 new FileReader(file) 中使用它

于 2012-11-26T21:27:10.047 回答
0

看起来你有 Maven 项目,所以资源在类路径中

去做

getClass().getResource("classpath:storedProcedures.sql")
于 2012-11-26T19:48:39.373 回答