Spring在资源中找不到文件

Clo*_*mez 3 java spring file

我有以下几行

File file = ResourceUtils.getFile("classpath:calculation.csv");
Run Code Online (Sandbox Code Playgroud)

我也尝试过

File file = ResourceUtils.getFile("classpath:/calculation.csv");
Run Code Online (Sandbox Code Playgroud)

但两者都会抛出错误

java.io.FileNotFoundException: class path resource [calculation.csv] cannot be resolved to absolute file path because it does not exist
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("calculation.csv").getFile());
Run Code Online (Sandbox Code Playgroud)

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

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

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

这东西想要走一条什么样的路?!

编辑3:

啊和

File file = new ClassPathResource("calculation.csv").getFile();
Run Code Online (Sandbox Code Playgroud)

也不行,这到底是什么..

Ant*_*sss 7

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

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

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

我认为,在大多数情况下,这Class#getResourceAsStream是可行的方法,并且我认为它也应该适合您阅读资源内容的需求。