- 浏览: 179236 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
为什么昵称都叫没了:
对的,我也在做微信公众平台的开发,发现一个简单的教程 http ...
微信公众平台API -
guji528:
想找一个好一点的调试器,不知eric是否OK,有空再研究一下
Eric IDE安装 -
youyang:
受教了,不得不顶。
NoSQL非关系数据库简介 -
zhongzhai:
谢谢分享,波一个
Java中的UDP协议编程 -
huwenbiao2010:
有实现JPopupMenu透明的案例不,发个给我 ,谢谢了 , ...
一道笔试题
在编写完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),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
import
java.io.BufferedReader;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.InputStreamReader;
public class
Test
{
public
Test
(){
try
{
// "/Test/123.txt" 相对于包的路径,区分大小写
InputStream input=
this
.getClass
()
.getResourceAsStream
(
"
/image/sample.gif
"
)
;
System.out.println
(
this
.getClass
()
.getResource
(
"/
conf.ini
"
))
;
BufferedReader in=
new
BufferedReader
(
new
InputStreamReader
(
input
))
;
String a;
while
(
true
){
a=in.readLine
()
;
if
(
a==
null
)
break
;
System.out.println
(
a+
"-----"
)
;
}
in.close
()
;
}
catch
(
IOException e
) {
e.printStackTrace
()
;
}
}
public static
void
main
(
String
[]
args
){
new
Test
()
;
}
}
评论
例如:
/*以下代码采用了以当前类为基准的路径指定方式。下面这行代码在运行时,会
*在jar文件中的根路径,搜索程序中用到的文件。
Reader reader =new InputStreamReader(
getClass().getResourceAsStream("/image/Environment.ini"));
感觉加斜杠叫以包为基准,不加叫以类为基准,呵呵
发表评论
-
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
2013-04-26 22:32 821继承 指的是一个类(称为子类、子接口)继承另外的一个类( ... -
数据库链接池(DBCP)配置参考
2012-01-31 17:20 928链接池不但能提高数据库的访问效率,也能有效地控制自 ... -
设置半透明的JMenuBar
2011-01-17 17:33 3062源作:陈思羽. 更新:龚德伟. 2008.07.20 ... -
使用svn——项目的目录布局
2011-01-07 21:12 770Subversion有一个很标准的目录结构,是这样的。 比如 ... -
Socket TCP连接和断开过程
2010-11-03 09:22 2284在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握 ... -
几个重要的TCP/IP选项解析(Java Socket)
2010-10-28 13:22 10451. SO_LINGER / SO_REUSEADDR ... -
java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
2010-10-25 13:41 942常见配置举例 堆大 ... -
jstat,jmap,jconsole,jvisualvm,jps,jinfo等JDK系统监控、性能调优工具
2010-10-11 13:57 764JProfiler在java程序性能调试方便表现优越,推荐使用 ... -
一道笔试题
2010-09-28 23:05 952问题说明 : 计算一个整形数组里的连续元素和的最大值 ... -
一个题目:超大量数据的排序
2010-09-22 03:40 1777一个文件里,有一堆int,把它们排序一下,输出到另外一个文 ... -
各种系统架构图及其简介
2010-03-01 11:35 2401转载请保留出处 , 不胜人生 一场醉汇总。 ... -
Java抓图软件
2010-01-19 09:52 983以下代码不是本人所写,乃是从网上搜到,记录下来供以后参考。 ... -
16进制字符串与byte数组互转(转载)
2010-01-13 21:07 1938import java.io.ByteArrayInp ... -
byte,int,char,double的相互转换(java)
2010-01-13 21:05 2670//整数到字节数组的转换 public stat ... -
Java中的UDP协议编程
2009-11-18 14:34 1850一. UDP协议定义 UDP协议的全称是用户数据报 ... -
System.getProperties()
2009-07-26 22:26 28171 、 java 通过 System.g ... -
System.getProperty()参数大全
2009-07-26 22:22 840java.version Ja ... -
log4j 日志文件相对路径
2009-07-26 21:32 12681、在Tomcat 5.5中的Log4j ... -
windows下openldap的安装与java操作测试
2009-07-01 15:36 885windows下openldap的安装与 ... -
用Ant编译、junit测试、生成测试报告、最终自动发mail
2009-03-19 14:15 1502测试通过的版本如下:Eclipse:3.3.2jdk:1.6j ...
相关推荐
JAVA打包后读取自身JAR中的文件.pdf
利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为使用java打包之后,生成的jar包中图片找不着的。这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成...
java反编译工具,读取打包后的jar代码
Java 读取本地.xls .xlsx文件 ,自带jar包,项目打包,重点是提供思路,希望大家认真阅读。
java读取excel必备jar包 付此jar包读取excel范例txt文件 整体打包为RAR格式 一起学习哈
新增支持读取parquet格式文件,支持写入parquet格式文件,修复读取orc读取数据丢失问题,重新打包后的jar文件。
java基于RXTXcomm.jar的串口通信所需dll-rxtxParallel.dll-rxtxSerial.dll以及工具,32位,64位皆有,已自测
json,json文件,commons-beanutils.jar,commons-collections.jar,commons-lang.jar,ezmorph-1.0.4.jar,json-lib-2.2.3-jdk15.jar 读取其中的内容可以传给前台用,并写好了测试类,可运行的
java实现读取Excel数据,根据一定格式写入Word,包含源代码,所需jar包及打包后的可执行jar文件,解压后将ExcelTrans直接导入MyEclipse即可,项目上可能会出现一个小叉,但是可以正常运行。
org.dtools.javaini-v1.1.00.jar 是从官网下载的java对ini配置文件读取的包,但是只支持ASCII码,此包 是我下载源码修改后上传重新编译打包支持UTF-8的jar。
java: 读取D:\Develop\maven\repository\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar时出错; error in opening zip file 提示jar出问题,找到此处,删除重新下载,但是jar依旧是损坏状态
设置windows服务,免除每次cmd进入目录运行的烦恼,你指的拥有,下载吧
压缩API:Java提供了java.util.zip和java.util.jar包来实现文件的压缩和解压缩操作。 压缩算法:通过选择不同的压缩算法,如DEFLATE算法用于ZIP格式,实现对文件的压缩。 流操作:使用Java的输入输出流(InputStream...
主要介绍了springboot项目打成jar包后无法获取static下的静态资源文件的问题分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
条形码开发需要的jar包 已经打包在其中 在ZXing文件中 自定义条形码也可以生成和读取 不限制条码长度
主要介绍了解决idea打包成功但是resource下的文件没有成功的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1. Apk多渠道打包工具 ...3. 此处是实现的代码和使用方法 ... markets.txt 是渠道列表, 里面的内容会拼接到打包好的apk上, 并且也会存在于apk文件的Comment字段中, 读取comment的代码也在上面的原理处有说明
实现功能有: 1.读取数据库生成excel; 主要文件:MakeExcel.java 2.对目录进行打包压缩; 主要文件:Myzip.java 3.下载文件,对文件下载后...压缩文件在MakeExcel.java中有调用 所有方法都已封装,详细功能请看代码
工作中自己封装的实用工具包。...分打包jar文件和源代码及使用说明。 此代码虽然不很复杂,但是这种程序结构和思想对普通程序员是有帮助的。 实现了缓存,只会对硬盘读一次。 其中的FileUtil是以前在网上找的。