java - Spring在资源中找不到文件

标签 java spring file

我有以下行

File file = ResourceUtils.getFile("classpath:calculation.csv");

我也尝试过

File file = ResourceUtils.getFile("classpath:/calculation.csv");

但是两者都会抛出错误

java.io.FileNotFoundException: class path resource [calculation.csv] cannot be resolved to absolute file path because it does not exist

但我的资源文件夹中有calculation.csv。 这是为什么?

我需要从资源文件夹中读取文件,它也应该在服务器环境中工作

编辑:

ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("calculation.csv").getFile());

工作得一样好,所以一点也不......

编辑2: 尝试使用文件夹..我的资源文件夹中现在有calculation.csv和csv/calculation.csv..

添加了/csv/后,以上都不起作用。

这东西想要什么样的路径?!

编辑3:

aa和

File file = new ClassPathResource("calculation.csv").getFile();

也不行,这到底是啥啊..

最佳答案

加载文件(作为 FILE)不起作用。您必须将其用作资源。 JAR 内的文件无论如何都不能作为文件使用。这也是您的“检查”代码所显示的内容。

classLoader.getResource("calculation.csv") 有效,因为您使用类加载器来获取资源,而不是使用文件系统来获取文件(这就是 File api 所做的)。如果您要处理非打包应用程序,它可以工作。将应用程序打包到 JAR 后,文件路径将类似于 your/path/to/jar.jar!someResource - 注意 ! 标记(这就是您将看到的内容)以及)。所以基本上它会返回 File 实例,你无论如何都无法使用它,因为文件系统无法访问它。

您也可以尝试先使用 ResourceUtiuls#extractJarFileURL(URL jarUrl) 提取它,然后使用提取的文件。

我认为,在大多数情况下,Class#getResourceAsStream 是可行的方法,我认为它也应该满足您读取资源内容的需求。

关于java - Spring在资源中找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55455522/

相关文章:

java - 从 Java 线程调用 C 函数后,整个 Java 应用程序变得无响应

java - 无法使用 python requests 模块发送 `multipart/form-data` 请求

python - 在python中以特定顺序读取文件

c - 读取.txt文件并打印结果

java - 在 JavaFx 中向 ListView 添加项目...线程?

java - 发送带有Jpcap问题的SYN包

spring-mvc - Spring 框架中的文件系统资源

java - 自动生成 MongoDB 的 Spring 数据查询 : X most recent entries

file - 文件在 Windows 上填充了数据,但在 Linux 上没有

java - 打印以下部分有哪些更好的方法?