Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring does not find file in resources

Tags:

java

file

spring

i have following line

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

and i also tried

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

but both will throw an error

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

but i do have calculation.csv in by resources folder.. why is this?

I need to read file from resources folder, and it should also work in server enviroment

EDIT:

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

works just as fine, so not at all..

EDIT2: tried with folder.. i have both calculation.csv and csv/calculation.csv in my resources folder now..

none of the above work, with /csv/ added.

what kind of path does this thing want?!

EDIT3:

aaand

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

is also no go, what even is this..

like image 200
Clomez Avatar asked Oct 18 '25 08:10

Clomez


1 Answers

Loading file (as FILE) wont work. You must use it as resource. Files inside JAR will not work as file anyway. This is also what your "check" code shows.

classLoader.getResource("calculation.csv") works, because you are using classloader to get resource, not filesystem to get file (which is what File api does). It could work, if you would deal with non packed application. Once you pack your app into JAR, file path will be like your/path/to/jar.jar!someResource - note ! mark (and that is what you would see as well). So basicly it will return File instance, you that you wont be able to use anyway, as file system has no access to it.

You could alternatively try to extract it first with ResourceUtiuls#extractJarFileURL(URL jarUrl) and then use extracted file.

I think, that in most cases Class#getResourceAsStream is the way to go and I think that it should fit your needs as well to read content of resource.

like image 101
Antoniossss Avatar answered Oct 20 '25 22:10

Antoniossss