Java 无法读取jar文件中的文件
我使用spring boot开发了一个应用程序,我需要读取包含电子邮件的csv文件 这是一段我的做法:Java 无法读取jar文件中的文件,java,docker,gradle,spring-boot,Java,Docker,Gradle,Spring Boot,我使用spring boot开发了一个应用程序,我需要读取包含电子邮件的csv文件 这是一段我的做法: public Set<String> readFile() { Set<String> setOfEmails = new HashSet<String>(); try { ClassPathResource cl = new ClassPathResource("myFile.csv&qu
public Set<String> readFile() {
Set<String> setOfEmails = new HashSet<String>();
try {
ClassPathResource cl = new ClassPathResource("myFile.csv");
File file = cl.getFile();
Stream<String> stream = Files.lines(Paths.get(file.getPath()));
setOfEmails = stream.collect(Collectors.toSet());
} catch (IOException e) {
logger.error("file error " + e.getMessage());
}
return setOfEmails;
}
public Set readFile(){
Set setOfEmails=newhashset();
试一试{
ClassPathResource cl=新的ClassPathResource(“myFile.csv”);
File File=cl.getFile();
Stream=Files.line(path.get(file.getPath());
setOfEmails=stream.collect(Collectors.toSet());
}捕获(IOE异常){
logger.error(“文件错误”+e.getMessage());
}
返回一组邮件;
}
当我使用eclipse:runas-->spring boot-app执行应用程序时,它会工作
但是当我将jar放入容器docker中时,readFile()方法返回一个空集
我使用gradle构建应用程序
你有什么想法吗?我不使用Spring,但我发现Javadoc中有这样的语句: 如果类路径资源位于文件系统中,则支持将其解析为java.io.File,但不支持将其解析为JAR中的资源。始终支持解析为URL 尝试使用
getURL()
而不是getFile()
使用JDGUI将您的jar文件放到那里,然后
“//myFile.csv”
java.io.File
,但不支持解析为JAR中的资源。始终支持解析为URL
因此,当资源(CSV文件)位于JAR文件中时,getFile()
将失败
解决方案是使用getURL()
,然后将URL作为输入流打开,等等。大概是这样的:
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;
}
public Set readFile(){
Set setOfEmails=newhashset();
ClassPathResource cl=新的ClassPathResource(“myFile.csv”);
URL URL=cl.getURL();
try(BufferedReader br=新的BufferedReader(
新的InputStreamReader(url.openStream())){
Stream=br.lines();
setOfEmails=stream.collect(Collectors.toSet());
}捕获(IOE异常){
logger.error(“文件错误”+e.getMessage());
}
返回一组邮件;
}
如果仍然失败,请检查您使用的资源路径是否正确