在我的Web应用程序中,我要读取excel文件,该文件位于src / main / resource / static / doc中,因此我使用
String basePath = ClassLoader.getSystemResource("").getPath();
获取资源路径并读取它。它是在我的IDE IDEA中工作的,我只要运行它就可以得到excel。
但是,当我使用java -jar lab.jar
运行spring boot项目时,它抛出了NullpointerException,但是当我使用
String basePath = ClassLoader.getSystemResource("application.properties").getPath();
并打印它,我看到了/Users/zhangzhikai/lab-center/target/lab.jar!/BOOT-INF/classes!/application.properties。
为什么我不能从罐子里拿出优秀的东西?
答案 0 :(得分:0)
在Java中使用File
时,必须指向OS文件系统上的物理文件。在运行未打包的应用程序时就是这种情况,但是在运行jar
时,它不是物理文件,因此将无法工作(导致错误或空指针异常)
使用Spring的Resource
类之一来访问资源。在这种情况下,由于它来自类路径,因此您想使用ClassPathResource
。然后直接使用InputStream
来读取文件。
Resource input = new ClassPathResource(“static/doc/modal/model.xls”);
InputStream in = input.getInputStream();
// Use InputStream to read file
这将作为打包和未打包的应用程序工作。请勿使用getFile
,因为打包后将无法使用。
答案 1 :(得分:-1)
File xlsfile = new ClassPathResource("/doc/modal/model.xls").getFile();
//also check the path
//String currentPath = xlsfile .getAbsolutePath();
File newXls=new File("classpath:static/doc/temp");
newXls=xlsfile;
在评论中讨论希望对您有所帮助。