我有一个关于如何运行springboot项目的问题

时间:2018-10-22 09:24:42

标签: java spring-boot jar

在我的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。

为什么我不能从罐子里拿出优秀的东西?

这是我的文件目录: enter image description here

2 个答案:

答案 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;

在评论中讨论希望对您有所帮助。