Java Spring - 如何使用classpath指定文件位置?

Tak*_*kun 33 java spring classpath

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

这就是我目前所拥有的:

FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
Run Code Online (Sandbox Code Playgroud)

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

FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Tom*_*icz 38

我们在谈论标准java.io.FileReader吗?不行,但没有它就不难.

/src/main/resources maven目录内容放在CLASSPATH的根目录中,因此您只需使用以下命令检索它:

InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");
Run Code Online (Sandbox Code Playgroud)

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

Reader reader = new InputStreamReader(is);
Run Code Online (Sandbox Code Playgroud)


Pho*_*ixS 10

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

Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();
Run Code Online (Sandbox Code Playgroud)

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

请注意,Resource有一个方法来获取,java.io.File所以你也可以使用:

Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());
Run Code Online (Sandbox Code Playgroud)


Evg*_*eev 5

Spring有org.springframework.core.io.Resource,它是为这种情况设计的.从context.xml可以将classpath传递给bean

<bean class="test.Test1">
        <property name="path" value="classpath:/test/test1.xml" />
    </bean>
Run Code Online (Sandbox Code Playgroud)

你在bean中得到它作为资源:

public void setPath(Resource path) throws IOException {
    File file = path.getFile();
    System.out.println(file);
    }
Run Code Online (Sandbox Code Playgroud)

产量

D:\workspace1\spring\target\test-classes\test\test1.xml
Run Code Online (Sandbox Code Playgroud)

现在你可以在新的FileReader(文件)中使用它

  • 您可以将setter中的Resource替换为File来保存您不必调用path.getFile(); (3认同)