社区
Java SE
帖子详情
如何读取自身Jar包中的文件.?
cydp007
2008-03-06 09:48:04
我的程序需要从外部引用一个.bat批处理文件.
如果不打成Jar包//文件运行良好.
但是一但把程序打成Jar包.(那个.bat也打进去.) 批处理文件就不会运行.这怎么弄?
有用getClass().getResource();
不会弄了..
...全文
3166
7
打赏
收藏
如何读取自身Jar包中的文件.?
我的程序需要从外部引用一个.bat批处理文件. 如果不打成Jar包//文件运行良好. 但是一但把程序打成Jar包.(那个.bat也打进去.) 批处理文件就不会运行.这怎么弄? 有用getClass().getResource(); 不会弄了..
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
学习。
EXCELJAVA
读取
JAR包
新建一个java project ,将poi.
jar包
导入,将test.java
文件
复制到项目里面,在e:盘新建一个Book1.exl
文件
,里面的内容自己定义,运行CODE,就可以在控制台上看到了。
浅谈两个
jar包
中
包含完全相同的包名和类名的加载问题
下面小编就为大家带来一篇浅谈两个
jar包
中
包含完全相同的包名和类名的加载问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
JAVA_API1.6文档(
中
文)
java.util.jar 提供读写 JAR (Java ARchive)
文件
格式的类,该格式基于具有可选清单
文件
的标准 ZIP
文件
格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
java api最新7.0
java.util.jar 提供读写 JAR (Java ARchive)
文件
格式的类,该格式基于具有可选清单
文件
的标准 ZIP
文件
格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
CustomSSM:模仿SSM框架手写自己的框架,加深对框架的理解
CustomSSM模仿SSM框架手写自己的框架,加深对框架的理解在java WEB开发
中
大都是使用ssm框架进行开发,但是我们又是否了解了ssm框架的核心...才能够
读取
到参数准确名称在lib整合包
中
我已经打好了
jar包
,如果开发版本不
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章