jar中存在外部文件读取的情况。

说好不能打脸
Java领域优质创作者
博客专家认证
2007-06-21 11:35:39
描述一下情况:
1、在编写一个jar包后,jar包中存在读取某个文件的代码,File("***.xml")。

2、将这个jar包放置在weblogic下的某个web应用中web-inf/lib/目录下,
完整路径为:E:\bea\user_projects\domains\workshop\applications\etscmDemo\WEB-INF\lib\etcsm.jar

要读取的xml也放在该目录之下。

3、在运行时小弟发现,系统不会在这个目录下去寻找这个xml文件。会在weblogic下的workshop工作空间下寻找。既是在:
E:\bea\user_projects\domains\workshop\目录下寻找。
那么结果当然是找不到这个xml文件。

那么请问各位大哥,小弟要纠正这个错误,在jar包中应该如何书写呢?

3Q~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...全文
363 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqrqq 2007-06-21
  • 打赏
  • 举报
回复
每个class都会有一个classloader负责载入它,每个classloader都对应一个或多个目录和jar文件。一般来说,同一web应用,都由一个classloader加载,它的对应目录是/WEB-INF/lib下的所有jar文件和/WEB-INF/classes

Thread.currentThread().getContextClassLoader()是在取得当前的classloader,有了它,就能找到classes下面的各种资源文件了
zqrqq 2007-06-21
  • 打赏
  • 举报
回复
想完全弄清除上面的代码,需要了解一些classloader的概念。

说好不能打脸 2007-06-21
  • 打赏
  • 举报
回复
打包到jar不是我想要的。
能解释一下第一种方法吗?
怎么是Thread中出来的啊?
小弟不是很清楚,谢谢~~
fashchina 2007-06-21
  • 打赏
  • 举报
回复
up
zqrqq 2007-06-21
  • 打赏
  • 举报
回复
方法1:把那个文件放到classes下面,并修改读文件的代码为:
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("***.xml");

方法2:把那个文件打包到jar文件中(只是这样就不能再修改它了)
zqrqq 2007-06-21
  • 打赏
  • 举报
回复
方法1:把那个文件放到classes下面,并修改读文件的代码为:
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("***.xml");

方法1:把那个文件打包到jar文件中(只是这样就不能再修改它了)
说好不能打脸 2007-06-21
  • 打赏
  • 举报
回复
要取完整路径是绝对不可能的,
因为这个jar是一个和业务层完全脱偶的套件,在不同的环境中会被放置在不同的地方。
我们只能向使用者规定“该xml文件必须和jar存放在同一目录下”

至于什么用request里面的方法来指定路径更是错误的,因为运行环境不一定就是在web服务器下
andfind 2007-06-21
  • 打赏
  • 举报
回复
试验下j:
ar包中存在读取某个文件的代码,File(完整的路径名+"***.xml")。
Cappuccino_mhc 2007-06-21
  • 打赏
  • 举报
回复
沙发
嘿嘿~
没打过包
帮你顶

81,092

社区成员

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

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