静态文件打入jar包和不打入jar包

文件被打入jar包,将jar包放在远程服务器运行,通过下面代码获取失败。

URL url = ParseExcelUtil.class.getClassLoader().getResource("rules/company.xml");
File xmlFile = new File(url.getFile());
System.out.println(url);
log.info(url.getPath());
远程服务器运行的服务获取的url
jar:file:/D:/server/gayg/gayg-1.0.jar!/BOOT-INF/classes!/rules/company.xml
[INFO ] 2018-02-06 18:25:16.105 [http-nio-10002-exec-2] c.j.g.common.exceldbn.ParseExcelUtil - file:/D:/server/gayg/gayg-1.0.jar!/BOOT-INF/classes!/rules/company.xml

通过打印log查看url,发现本机电脑运行的服务获取的url路径和远程服务器运行的服务获取的url路径是正确的,但是远程服务器报FileNotFoundException错误,是因为jar一个二进制文件,jar包里的文件company.xml只是jar包的一部分,相当于是一部分二进制,可以理解为流。所以如果想正确获取company.xml,只能通过getResourceAsStream方法直接获得流。

        InputStream url = null;
        try {
            url = ParseExcelUtil.class.getClassLoader().getResourceAsStream("rules/company.xml");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

不打入jar包,可以直接在远程服务器的相对应目录下放入文件,与代码中的绝对路径一致,也可以成功获取。一般修改频繁的静态文件不打入jar包

你可能感兴趣的:(静态文件打入jar包和不打入jar包)