I developped an application using spring-boot, I need to read a csv file that contain emails.
this is a snippet how I do:
public Set readFile
Use http://jd.benow.ca/ Jd GUI drop your jar file there and
check is the file is there in the jar
If Yes then see the path/folder structure where it is placed.
If Yes folder exists Access the File using "/<path>/myFile.csv"
The javadocs for ClassPathResource
state:
Supports resolution as
java.io.File
if the class path resource resides in the file system, but not for resources in a JAR. Always supports resolution as URL.
So when the resource (the CSV file) is in a JAR file, getFile()
is going to fail.
The solution is to use getURL()
instead, then open the URL as an input stream, etcetera. Something like this:
public Set<String> readFile() {
Set<String> setOfEmails = new HashSet<String>();
ClassPathResource cl = new ClassPathResource("myFile.csv");
URL url = cl.getURL();
try (BufferedReader br = new BufferedReader(
new InputStreamReader(url.openStream()))) {
Stream<String> stream = br.lines();
setOfEmails = stream.collect(Collectors.toSet());
} catch (IOException e) {
logger.error("file error " + e.getMessage());
}
return setOfEmails;
}
If it still fails check that you are using the correct resource path.
I do not work with Spring, but I found the Javadoc of ClassPathResource that states:
Supports resolution as java.io.File if the class path resource resides in the file system, but not for resources in a JAR. Always supports resolution as URL.
try with getURL()
instead of getFile()
.