zoukankan      html  css  js  c++  java
  • JAVA问题解决——Jar包中资源调用

    我在打包工程的时候,遇到在IDE中能够运行但jar包运行错误的情况(FileNotFoundException)。
    在网上找的很多解决方法都是需要使用getResouce方法获取绝对路径,或者必须先把文件读入才能继续操作。
    使用getRescource仍然有上述错误;而要读取的文件是一个需要和前端交互,要在文件上进行操作的文件,必须保证文件原格式不变。所以读入再操作的方法并不适合,因为再输出时格式控制等会十分麻烦。
    下面是一些解决问题中学习到的内容:
    i.
    jar包是一个文件,我的理解是,jar包内部有一个自己的文件系统(它会在文件特定路径上加一个!,即会出现*!/*这样的形式),而在jar包内使用相对或绝对路径其实调用的都是机器上的FileSystem,路径和jar包中的不匹配,因此想要以这个路径在jar包中获取文件是不可行的。
    (这让我产生了另一个疑问,那网上的getResource()方法传入的路径是怎么解析的)
    疑问解答:
    如果只是路径,jar包是可以获取的,而且还是绝对路径(/static/config.xml),jar包内部是可以获取到的(虽然不知道为什么),但是如果要调用
    Resource resource = new ClassPathResource(path);
    File file = resource.getFile();
    这个时候是不可以的。
    我认为是因为调用了File,是机器上的文件系统,而files输出也是file:/C:/****的路径,和jar包内路径是不符合的,因此jar包无法通过file来找到文件。
    ii.
    这次之所以要使用文件路径,是因为调用了一个DocumentBuidler.parse()方法,一开始是传入了一个File类型的参数,而新建File又使用了路径,问题迟迟不能解决就查看了源代码,发现parse方法可以重载:
     
    // 下面是4个重载的parse函数
    public Document parse(InputStream is){...}
    
    public Document parse(InputStream is,String SystemId){...}
    
    public Document parse(String uri){...}
    
    public Document parse(File f) throws SAXException, IOException{...}

    然后!就发现可以直接传URI!就用了下面的方法:
    /** 
    * doc 是Document的实例
    * db是DocumentBuilder实例
    * path是资源文件的绝对路径
    */
    doc = db.parse(this.getClass().getResource(path).toString());
    然后就成了!!
  • 相关阅读:
    控制翻转与容器
    构造函数传递参数
    bean属性检查
    tomcat源码阅读14
    Block Formatting Context
    IE 兼容性问题的处理
    JavaScript 的原型与继承
    IE 多版本测试工具 IETester
    callee,caller,call,apply
    HDOJ2175 汉诺塔IX
  • 原文地址:https://www.cnblogs.com/morale-u/p/7469411.html
Copyright © 2011-2022 走看看