如何读取自身Jar包中的文件.?

cydp007 2008-03-06 09:48:04
我的程序需要从外部引用一个.bat批处理文件.

如果不打成Jar包//文件运行良好.

但是一但把程序打成Jar包.(那个.bat也打进去.) 批处理文件就不会运行.这怎么弄?

有用getClass().getResource();

不会弄了..
...全文
3166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maquan 2008-03-10
  • 打赏
  • 举报
回复
> 什么文件可以? .bat 不行的话. .
> 哪些文件是可以的? image.? or?

问题的本质是这样的:如果你要用自己的程序去读文件,什么类型的文件都一样可以读到(就用你说的 getResource());但是,.BAT 文件是给操作系统用的,操作系统并不支持从 jar 文件里运行一个 BAT 文件。

所以,如果你一定要把 BAT 文件打到 jar 包里,那只能自己写程序读出这个文件的内容,再写到一个操作系统能看到的地方(也就是写到硬盘上的一个文件里),再让操作系统去运行它。

BTW: JAR 的意思就是 Java ARchive,顾名思义,就像老紫竹说的,“应该把非java文件放到外面”。
hmsuccess 2008-03-09
  • 打赏
  • 举报
回复
请问老紫竹.
你说的哪种方法怎么做?学习
sunyujia 2008-03-09
  • 打赏
  • 举报
回复
上面帖子我没细看,下面是一个直接的想法

读批处理
写到外面执行
执行完了再删掉

jar文件中的批处理不能执行的
cydp007 2008-03-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 java2000_net 的回复:]
.bat??
没戏了,你应该把非java文件放到外面
另, 你还可以从jar读取bat的内容,然后创建一个临时的bat文件,并调用它也可以!
[/Quote]

请问老紫竹.

什么文件可以? .bat 不行的话. .

哪些文件是可以的? image.? or?
老紫竹 2008-03-08
  • 打赏
  • 举报
回复
.bat??
没戏了,你应该把非java文件放到外面
另, 你还可以从jar读取bat的内容,然后创建一个临时的bat文件,并调用它也可以!
yibunengjing 2008-03-07
  • 打赏
  • 举报
回复
以下为转,在实际项目中我也用到,是可行的,供楼主参考:

在编写完Java程序后,打包成Jar时发布,会发现找不到Jar文件中的图片和文本文件,其原因是程序中载入图片或文本文件时,使用了以当前工作路径为基准的方式来指定文件和路径。这与用户运行Jar包时的当前工作路径并不一致。

问题分析:
例如:以Windows为例说明,以下是开发项目“AAA”的部分代码,开发和调试时的根路径为D:\aaa,这样程序运行时当前路径为"D:\aaa",大家可以用System.getProperty("user.dir")方法求证当前用户工作路径。

//下面代码使用了基于当前工作路径的方式指定了文件对象
File imageFile = new File("/images/sample.gif");
ImageIcon imageIcon = new ImageIcon(File.toURI);
File iniFile = new File("/conf.ini");
FileInputStream fileInputStream = new FileInputStream(iniFile.toURI);
/*
*这样程序会去找以下两个文件:
* D:\aaa\images\sample.gif
* D:\aaa\conf.ini
*/

以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前),是没有问题的,但在打包后,由于所有图片文件和文本文件都将打包到Jar文件 中,由于System中的"user.dir"属性发生了变化,会造成用绝对路径的方式无法找到Jar文件中包含路径和文件。例如大家将上面的项目 “AAA”中的所有类文件、图片文件和文本文件等打包为E:\aaa.jar文件并发布,在用户执行该aaa.jar中的程序时,当前路径取决于用户运行 该程序的当前路径。

例如: 在“E:\”目录下运行该程序:

E:\> java -jar aaa.jar

此时用户的当前路径(System的user.dir属性)是“E:\”,而非开发者所期望的“E:\aaa”,所以会按以下路径来搜索文件:
E:\images\sample.gif
E:\conf.ini
但是所有的图片和文本文件包含在E:\aaa.jar文件中,所以会致使程序无法正常运行。

问题解决:

为了解决上述问题,推荐采用Java本身以类为基准的路径搜索方式。
例如:
/*
*以下代码采用了以当前类为基准的路径指定方式。下面这行代码在运行时,会
*在jar文件中的根路径,搜索程序中用到的文件。
Reader reader =new InputStreamReader(
getClass().getResourceAsStream("/image/Environment.ini"));
ImageIcon i=new ImageIcon(getClass().getResource("/image/b1.gif"));

以上两行代码采用了下面两条Java语句:
getClass().getResourceAsStream("FileName");
getClass().getResource("File");
含有这种代码的程序在运行时,以类(类路径)为基准,而不依赖当前路径(System中的user.dir)。

注意:上面的路径"/image/Environment.ini"如果写成"image/Environment.ini",将表示在类同路径下的路径 (className/image/Environment.ini),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
joejoe1991 2008-03-06
  • 打赏
  • 举报
回复
学习。

62,614

社区成员

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

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