打包jar后,资源文件找不到的问题

tgyhrfuj741 2012-07-09 03:41:13
在项目打包成jar的时候,资源文件要通过getClass.getResourceAsStream(path)的方式,才能保证资源文件能正常读取,不然会找不到资源文件的路径。

我做了一个建议浏览器,在src→com.ie.res有用来保存设置的文件config.cfg,保存文件时可以用getClass().getResourceAsStream(path)以流的方式读取,这个没有问题,但是在对浏览器进行设置时,需要将数据写入文件,问题就来了。get()lass.getResourceAsStream(path)获取的是InputStream对象,不能用于数据写入,于是我就用getClass().getResource(path).getPath()来获取设置文件的绝对路径再进行写入,但是没有成功,只能在eclipse环境内得到文件的路径,打包成jar以后就获取不到文件的路径了。

请问要用什么方法才能在打包jar后正常的找到资源文件并进行写入
...全文
1389 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq798875656 2012-08-19
  • 打赏
  • 举报
回复
新手人场,楼住在不!!!
小文件 2012-08-19
  • 打赏
  • 举报
回复
额,我看看楼主说的第一条。。。
那个
getReasource()

getReasourceAsStream()有什么区别呢
tgyhrfuj741 2012-07-09
  • 打赏
  • 举报
回复
我找到了一个获取当前执行的jar包的路径的方法
getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
不管jar包放在哪都能输出jar包位置

但是现在又碰到了一个问题:怎么获取执行的jar包的名字?
因为用上面的方式输出的路径把jar包的名字包括进去了,这就需要把jar的的名字去掉,才能得到当前文件夹的路径,但是jar包的名字在导出后可以随便更改,更改后输出路径也会改掉,所以须要在代码里面获取执行的jar包的名字才能得到当前文件夹的路径
tgyhrfuj741 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

可以获得路径的,自己处理下前缀就行了:

URL url = ClassLoader.getSystemResource(".");

结果:file:/D:/workspace/xxoo/bin/
[/Quote]
貌似不行,我在初始化的地方加了cfgPath = ClassLoader.getSystemResource(".").getPath(),导出的jar无法运行
MiceRice 2012-07-09
  • 打赏
  • 举报
回复
可以获得路径的,自己处理下前缀就行了:

URL url = ClassLoader.getSystemResource(".");

结果:file:/D:/workspace/xxoo/bin/
tgyhrfuj741 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

哦,原来是J2ME开发么?有自带支持的。

javax.microedition.rms.RecordStore

参见:
http://blog.csdn.net/skyge/article/details/4200248
[/Quote]
额……不是j2me的,是j2se的,我只是想举个例子而已,貌似用错例子了……

要用什么方法才能在打包jar后获得jar当前放置的路径呢
MiceRice 2012-07-09
  • 打赏
  • 举报
回复
哦,原来是J2ME开发么?有自带支持的。

javax.microedition.rms.RecordStore

参见:
http://blog.csdn.net/skyge/article/details/4200248
tgyhrfuj741 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

独立文件记录、Cookie记录、服务器端记录,具体看情况了。
[/Quote]
那比如以前塞班S40的游戏一样,都是只有一个jar文件,它们的设置记录是怎么实现的呢
MiceRice 2012-07-09
  • 打赏
  • 举报
回复
独立文件记录、Cookie记录、服务器端记录,具体看情况了。
tgyhrfuj741 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你的要求无法实现。

jar本身是个压缩包,往压缩包里面写东西可没那么简单;
更何况你这个压缩包还处于被ClassLoader打开的状态下。


只能设法采用其它方式绕开,比如另外在某个目录中生成新文件,读取时优先选用新文件。
[/Quote]
可是那些java游戏里面的设置和分数记录是怎么实现的
MiceRice 2012-07-09
  • 打赏
  • 举报
回复
你的要求无法实现。

jar本身是个压缩包,往压缩包里面写东西可没那么简单;
更何况你这个压缩包还处于被ClassLoader打开的状态下。


只能设法采用其它方式绕开,比如另外在某个目录中生成新文件,读取时优先选用新文件。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧