FileNotFoundException in src/main/resources
Solution 1
If you're going to package the file in the class path, then read it as such.. from the class path.
Maven Structure
src
main
resources
file.txt
After it builds, the file gets placed in the root of the class path. So use
InputStream is = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
The /
in front of file.txt
will bring you to the root, from whatever package the class is in.
UPDATE
Test example
package com.underdogdevs.stackoverflow;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class TestResourceFile {
public static void main(String[] args) throws IOException {
InputStream is = TestResourceFile.class.getResourceAsStream("/test.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
Solution 2
just give this as your path:
BufferedReader br = new BufferedReader(new FileReader(new
File("src/main/resources/temp.txt")));
Solution 3
Had this problem when setting up integration tests in Jenkins.
The issue was caused by having the job inside a folder with spaces in the name. So instead of having a workspace folder named foo bar
, Jenkins created foo%20bar
and the tests all failed with FileNotFoundException
.
The solution is just to rename your folder so it doesn't have any spaces.
Related videos on Youtube
Mulgard
Updated on November 07, 2020Comments
-
Mulgard over 3 years
i placed a file in my maven project under src/main/resources the files name is simply temp.txt.
When i try to open the file:
BufferedReader br = new BufferedReader(new FileReader(new File("./temp.txt")));
I get an error:
Exception in thread "main" java.io.FileNotFoundException: \temp.txt
all files under src/main/resources are placed in the root folder of the classpath under maven. So why cant the program find the file here?
-
james about 10 yearsdo you need the
'.'
? -
Mulgard about 10 yearsthat changes nothing. The '.' just says the current directory. Without '.' is the same like with the '.'.
-
james about 10 yearstry removing it anyways
-
-
Mulgard about 10 yearssame exception. and all other files i load on the same way and it works perfectly.
-
Paul Samsotha about 10 yearsAnd your file is in
src/main/resources/file.txt
? -
Paul Samsotha about 10 years@Mulgard See my UPDATE
-
Leos Literak about 10 yearsReview your build and verify that the file is copied correctly. Is not there some typo?
-
Hooli almost 8 yearsWith the
/
=null
. Without the/
=NullPointerException
? -
Paul Samsotha over 3 yearsThis is not going to work after you export your project. You will no longer have access to the source code (src dir) when the project is deployed. If you are placing files into the resource dir, then they should be read as classpath resources.