作者omidofor (妈妈咪呀)
看板java
标题[问题] 关於jar档读取的问题
时间Sun Aug 12 20:05:39 2012
我写了一个程式日後要把他汇出成jar档来执行,
这个程式会读取图片来做处理,
因此我希望将程式的部份和图片资源的部份分开包装,
像这个样子:
┌─┐ ┌─┐
│A│ │B│
└─┘ └─┘
A是一些CLASS包成的jar档,
也就是程式主体。
B则是单纯的图片及文字档等等。
我希望日後把A跟B放在同一个路径下,
双击A後可以执行并且读到B的内容。
但是我上网查了几天资料,
只有找到JAR protocal这个关键字,
也试过他的路径格式 jar:file:*******.jar!
但是总是读不到B的图片。
除非我把他包成
┌───┐
│A+B │
└───┘
再配合 getResource 或是 getResourceAsStream
才可以读到B的图片。
但是我不可能这麽做阿...
因为假设未来A跟B的档案大小都有一定程度,
当我程式有新版本要释出时,
不可能要连B一起包给使用者阿。
或是当我需要改变B的图片,
我希望不要连着程式本身(也就是A)一起包给使用者,
只要让使用者下载新版的B并且替换就好。
我知道有另一种办法,
就是不要把图片资源包成JAR档,
直接用资料夹整理再放在与A相同的路径下。
这样虽然可以方便未来个别更新程式以及图片。
但是我希望我的图片不要「轻易」的被使用者复制、更改或是散布。
如果只用资料夹整理,
我的图片就很容易被人修改或是做其他的事。
也有可能会对程式本身造成问题。
基於此种原因,我还是需要把他们包成两个JAR档。
可是我就是试不出来他该怎麽写…
因此在这边徵求各位先进指点一些方向,
谢谢各位了!
後来的解决方式:
其实也是利用jar protocal的方式,
只是先前我打错了。
URL url = new URL("
档案路径");
如果要像我这样汇出成A、B 2个jar,
然後直接执行A的话,
首先先把A、B两个jar档放在同个目录下,
假设是D:/test/下好了,
档案路径要打成:
jar:file:B.jar!/a/b/c.jpg
红色部份是固定的,所以不用更动。
黄色部份是B.jar的位置,这边用的是相对位址,
位址的起始就是A.jar放的位置,也就是D:/test/
这部份也可改写成:
jar:file:./B.jar!/a/b/c.jpg
或改写成绝对位址:
jar:file:D:/test/B.jar!/a/b/c.jpg
记得jar後面要加上一个"
!"
紫色部份是图片档在B.jar里的位置。
就是当初在汇出时,
图片档在专案下的相对位址。
记得要把图片放在
专案名称/bin/ 的下面
不然汇出的时候是怎麽样也无法读到的。
此范例是放在
专案名称/bin/a/b/c.jpg
以上是汇出成jar的执行配置。
但是在开发过程中,(我是用eclipse)
在执行a的程式时,
a的执行位置是在
专案名称/ 之下,
也就是跟 bin、src 同层目录之下,
所以要把B.jar放在
专案名称/B.jar
这样用eclipse执行的时候才会读到。
那大概就是这样。
--
◢
▊ ◣ ◢
◥ ◢ ◢▊ ◣ sunnycat ◥
█◤ ▊ ◢▇▅◢
▇▅ ▊◢▆ ◢▇◢
▇▅ ▊◢▆◢
▇▅ █
◤ ▊ ◢
▊ ◢▇
◥◢◤▏█◤◢◥█◣ █◤◢ █
◤█◤◢ █
█◣█◤ ◢ ◥◢◤▏█◤ ◢ █◤
▁▏◥
█◤◥▅◤ ◥ ◤ ◥ ◥█◤ ◥◥◤◥▄◤▏ ▁▏
◥▂◤▏◥
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.87.89
1F:→ omidofor:想不到我才刚po完文没多久就解决了@@ 08/12 20:26
2F:→ omidofor:由於板上不方便连推,我是要删文还是回文打上解决办法呢 08/12 20:28
3F:推 PsMonkey:直接大 E 修改文章也可以 08/12 21:06
※ 编辑: omidofor 来自: 140.115.87.89 (08/12 22:12)
4F:→ sbrhsieh:图片包在 jar 里并不会比较难以复制、修改、散布。 08/12 23:18
5F:→ omidofor:是没错啦@@,我主要是想防那些不懂写程式的人 08/12 23:51
6F:→ omidofor:那请问有没有什麽好方法可以达到不易复制、修改的目的? 08/12 23:53
7F:→ omidofor:希望不要是关於加解密或是将图片转成自己定义的格式 08/12 23:56
8F:推 musie:改个副档名就好了... 08/13 11:51