Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSpring-如何使用类路径指定文件位置?_Java_Spring_Classpath - Fatal编程技术网

JavaSpring-如何使用类路径指定文件位置?

JavaSpring-如何使用类路径指定文件位置?,java,spring,classpath,Java,Spring,Classpath,如何使用类路径指定Spring项目中的文件位置 这就是我目前拥有的: FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql"); 这是硬编码到我的桌面。我希望能够使用项目中文件的路径 FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql"); 有什么建议吗?我们是在谈论标准吗?不起作用,但没有它也

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

这就是我目前拥有的:

FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
这是硬编码到我的桌面。我希望能够使用项目中文件的路径

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

有什么建议吗?

我们是在谈论标准吗?不起作用,但没有它也不难

/src/main/resources
maven目录内容放在类路径的根目录中,因此您可以使用以下方法简单地检索它:

InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");
如果结果不是
null
(未找到资源),请将其包装在读取器中:

Reader reader = new InputStreamReader(is);

看起来您有maven项目,因此资源位于类路径中

追求

getClass().getResource("classpath:storedProcedures.sql")

Spring有org.springframework.core.io.Resource,它是为这种情况而设计的。可以从context.xml向bean传递类路径

<bean class="test.Test1">
        <property name="path" value="classpath:/test/test1.xml" />
    </bean>
输出

D:\workspace1\spring\target\test-classes\test\test1.xml

现在,您可以在新的FileReader(文件)中使用它。

中的@NimChimpsky的答案是:

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

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

Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());

classpath:
prefix在核心Java中不起作用,它是特定于Spring的。当然,问题是关于
Spring
您可以将setter中的资源替换为File,以避免调用path.getFile();这在春天对我来说真的很管用,但我如何在写作中做到这一点呢?我已经尝试了各种
BufferedWriter
实现,但没有一个能完全解决我的问题!我不知怎么读了文件,但有人能告诉我在写作时应该使用什么吗?
Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();
Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());