弹簧在资源中找不到文件

我有以下行

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

但我确实有计算.csv在资源文件夹中。这是为什么呢?

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

编辑:

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

工作同样好,所以根本不是。

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

上述方法均不起作用,并添加了 /csv/。

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

编辑3:

阿安德

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

也是没去的,到底是什么。


PIPIONE
浏览 66回答 1
1回答

慕勒3428872

加载文件(作为文件)将不起作用。您必须将其用作资源。无论如何,JAR中的文件都不会作为文件工作。这也是您的“检查”代码所显示的内容。classLoader.getResource("calculation.csv")工作,因为你使用类装入器来获取资源,而不是文件系统来获取文件(这是File api所做的)。它可以工作,如果你要处理非打包的应用程序。将应用程序打包到JAR中后,文件路径将如下所示 - 注意标记(这也是您将看到的)。因此,基本上它将返回实例,您无论如何都无法使用,因为文件系统无法访问它。your/path/to/jar.jar!someResource!File或者,您可以尝试先将其解压缩,然后使用解压缩的文件。ResourceUtiuls#extractJarFileURL(URL jarUrl)我认为,在大多数情况下,这是要走的路,我认为阅读资源内容也应该符合您的需求。Class#getResourceAsStream
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java