精华帖 (4) :: 良好帖 (15) :: 新手帖 (9) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-10
最后修改:2009-10-10
pipilu 写道 Heart.X.Raid 写道 pipilu 写道 引用 这主要是因为jar包是一个单独的文件而非文件夹,绝对不可能通过"file:/e:/.../ResourceJar.jar/resource /res.txt"这种形式的文件URL来定位res.txt。所以即使是相对路径,也无法定位到jar文件内的txt文件(读者也许对这段原因解释有些费解,在下面我们会用一段代码运行的结果来进一步阐述)。 这里说的不对吧! jar包不是文件,而是一个文件夹 如果你的说法成立 引用 jar包是一个单独的文件而非文件夹 ,那么,我们写类路径时,就不用把jar包的文件名写到类路径里了,假设你依赖的jar包在程序执行路径下,那就直接写成:java -classpath . 类名就可以了,何必要写成: java -classpath .;xxx.jar;yyy.jar;zzz.jar 类名呢? 我绝对jar包是一种特殊的文件,如果说是文件夹的话,试问.rar文件算文件夹还是文件那? 其实我绝对就是URL解析的问题,jar包有自己的URL,不同于File的URL,所以不能简单的File f=new File(url);来访问。可能我的解释有些不准确,但我想说的原因不是jar是什么,而是访问jar中资源的特殊之处。 从这个意义上说,楼上的兄弟说的也挺在理的。 当然,访问jar的方法很多。这张贴有很多好心人回复了不少方法,谢谢大家了! 我强调这一点的原因在于,正是因为jar包是作为一个文件夹引入类路径的,才有之后的getResourceAsStream方法获得到类路径下的资源文件。在类路径中,我们是把它看作文件夹的。 你之所以能以目录形式访问jar包中的资源 是因为java可以解析路径 并映射到相关文件中的Entry 就好像你可以以表的形式访问数据库 可实际上表真的是以表的形式存放吗?? 你这种说法是在误导初学者 |
|
返回顶楼 | |
发表时间:2009-10-10
thx so much.
|
|
返回顶楼 | |
发表时间:2009-10-10
mallon 写道 admires 写道 读取jar文件中的文件,用类加载器,亦可以读取到文件。URL中有一个getFile()方法。
File f = new File(URL.getFile()); 这样就可以了。但是带来的问题是URL的路径中不支持文件夹包含空格(用%20代替了),如果要使用,需要再次转义。 虽然新的URI支持空格。但是URL.toURI().getPath()却不能够作为参数new出一个File对象。 我也碰到过,不过new File(url.getFile()); 改成new File(url.toURI())很完美,File的构造函数支持以URI作为参数的,哈哈 后来也有尝试过用URI作为参数构造File对象。但如果这个文件是存在于jar包中,也是不可以的。 在数次尝试之后发现可以用url.toURI().getSchemeSpecificPart()作为参数来构造File对象。 这样可以避免路径文件夹中有空格,或者汉字。 官方文档中对于getSchemeSpecificPart()方法的说明是: Returns the decoded scheme-specific part of this URI 而对于getPath() Returns the decoded path component of this URI 以上为人肉测试结果。 |
|
返回顶楼 | |
发表时间:2009-10-10
受教了,能少走弯路了!
|
|
返回顶楼 | |
发表时间:2009-10-11
收藏了,以前也一直碰到这样都问题,我是直接把资源文件暴露在jar包外面然后调用的!!
|
|
返回顶楼 | |
发表时间:2009-10-12
这样的方式,在动态热部署中,依然无法读取jar类的东西。
并且错误很怪异。 上半年遇到的问题。 最后改用zip流读入了 |
|
返回顶楼 | |
发表时间:2009-10-12
虽然没碰到过这样的问题,但是今天受教了
|
|
返回顶楼 | |
发表时间:2009-11-12
这个问题我遇到过,后来看了一下 java security才明白,jvm 在加载了jar包后,所有的资源访问都是通过java的安全机制的,就像你在本地pc上启动了一个虚拟系统,然后在虚拟系统中要来访问你本地pc的文件是不行的。所有只能通过java 类加载机制来寻找文件。
|
|
返回顶楼 | |
发表时间:2009-12-10
思考一个问题:执行下面一个命令
java -jar xxx.jar 是否有方法可以拿到java -jar执行时,解析xxx.jar的JarFile对象呢? 深入了解jvm... |
|
返回顶楼 | |
发表时间:2009-12-10
呵呵,不错,以前我老师这么讲过,可是我忘了,现在又复习了一下,彻底的明白了,
谢了 |
|
返回顶楼 | |