Spring在资源中找不到文件

时间:2019-04-01 12:48:43

标签: 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

但是我确实在resources文件夹中有Calculation.csv。 为什么会这样?

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

编辑:

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

工作正常,所以根本不行。

EDIT2: 尝试与文件夹..我现在在我的资源文件夹中同时具有Calculation.csv和csv / calculation.csv。.

以上所有操作均未添加/ csv /。

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

EDIT3:

aaand

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

也行不通,这到底是什么。

1 个答案:

答案 0 :(得分:1)

加载文件(作为FILE)将无法进行。您必须将其用作资源。 JAR中的文件无论如何都不会作为文件工作。这也是您的“检查”代码显示的内容。

classLoader.getResource("calculation.csv")之所以有效,是因为您正在使用类加载器来获取资源,而不是使用文件系统来获取文件(这是File api所做的事情)。如果您要处理非打包应用程序,则可以使用。将应用程序打包到JAR中后,文件路径将类似于your/path/to/jar.jar!someResource-注意!标记(这也是您所看到的)。因此,从根本上说,它将返回File实例,您将无法使用它,因为文件系统无法访问它。

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

我认为,在大多数情况下,Class#getResourceAsStream是必经之路,并且我认为它也应符合您的需求,以读取资源内容。