- 浏览: 184463 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
为什么昵称都叫没了:
对的,我也在做微信公众平台的开发,发现一个简单的教程 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 873继承 指的是一个类(称为子类、子接口)继承另外的一个类( ... -
数据库链接池(DBCP)配置参考
2012-01-31 17:20 1017链接池不但能提高数据库的访问效率,也能有效地控制自 ... -
设置半透明的JMenuBar
2011-01-17 17:33 3159源作:陈思羽. 更新:龚德伟. 2008.07.20 ... -
使用svn——项目的目录布局
2011-01-07 21:12 800Subversion有一个很标准的目录结构,是这样的。 比如 ... -
Socket TCP连接和断开过程
2010-11-03 09:22 2321在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握 ... -
几个重要的TCP/IP选项解析(Java Socket)
2010-10-28 13:22 10781. SO_LINGER / SO_REUSEADDR ... -
java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
2010-10-25 13:41 973常见配置举例 堆大 ... -
jstat,jmap,jconsole,jvisualvm,jps,jinfo等JDK系统监控、性能调优工具
2010-10-11 13:57 805JProfiler在java程序性能调试方便表现优越,推荐使用 ... -
一道笔试题
2010-09-28 23:05 1005问题说明 : 计算一个整形数组里的连续元素和的最大值 ... -
一个题目:超大量数据的排序
2010-09-22 03:40 1830一个文件里,有一堆int,把它们排序一下,输出到另外一个文 ... -
各种系统架构图及其简介
2010-03-01 11:35 2440转载请保留出处 , 不胜人生 一场醉汇总。 ... -
Java抓图软件
2010-01-19 09:52 1017以下代码不是本人所写,乃是从网上搜到,记录下来供以后参考。 ... -
16进制字符串与byte数组互转(转载)
2010-01-13 21:07 1975import java.io.ByteArrayInp ... -
byte,int,char,double的相互转换(java)
2010-01-13 21:05 2692//整数到字节数组的转换 public stat ... -
Java中的UDP协议编程
2009-11-18 14:34 1919一. UDP协议定义 UDP协议的全称是用户数据报 ... -
System.getProperties()
2009-07-26 22:26 28541 、 java 通过 System.g ... -
System.getProperty()参数大全
2009-07-26 22:22 873java.version Ja ... -
log4j 日志文件相对路径
2009-07-26 21:32 13011、在Tomcat 5.5中的Log4j ... -
windows下openldap的安装与java操作测试
2009-07-01 15:36 921windows下openldap的安装与 ... -
用Ant编译、junit测试、生成测试报告、最终自动发mail
2009-03-19 14:15 1574测试通过的版本如下:Eclipse:3.3.2jdk:1.6j ...
相关推荐
### JAVA打包后读取自身JAR中的文件 #### 背景介绍 在Java开发过程中,经常需要将项目打包成一个可独立运行的JAR文件。这种打包方式不仅便于分发,还能保护项目的源代码不被轻易查看。然而,在打包过程中,可能会...
然而,当项目完成后,我们需要将其打包成可执行的JAR文件,以便在其他环境中运行。在某些情况下,我们的项目可能依赖于外部的JAR库或者需要读取外部的配置文件,这在打包时需要特别处理。本文将详细介绍如何在...
在给定的代码示例中,`JarFileAccess`类展示了如何读取JAR文件中的指定文件并将其复制到目标目录。 1. **创建`JarFile`对象**: 使用`new JarFile()`构造函数创建`JarFile`对象,传入JAR文件的路径。这将打开JAR...
Java Archive (JAR) 文件是Java平台上的一个重要组成部分,它主要用于打包Java类、资源文件以及元数据。JAR文件的出现使得Java开发者能够将多个类文件组合成一个单一的可执行文件,方便分发和执行。在Java开发过程中...
当我们的应用程序被打包成JAR文件后,有时我们需要从JAR内部读取配置文件,例如application.properties或application.yml。本文将深入探讨如何在Spring框架中实现这一功能。 首先,理解Spring的资源配置。Spring...
利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为使用java打包之后,生成的jar包中图片找不着的。这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成...
JAVA打包成可运行的JAR程序 在 Java 开发中,为了方便程序的部署和分发,通常需要将程序打包成可执行的 JAR 文件。在这个过程中,需要注意几个重要的步骤,包括将依赖的 lib 包和配置文件正确地配置,生成 Class-...
JarInputStream jarInput = new JarInputStream(new FileInputStream("读取jar自身.exe")); JarEntry entry; while ((entry = jarInput.getNextJarEntry()) != null) { if (entry.getName().equals("data.txt"))...
要从 JAR 文件中得到它所包含的文件内容,可以使用 Java 提供的 JarFile 类,它是一个 .jar 文件自身的引用。其中的每个文件则由 JarEntry 引用。可以传递一个参数给 JarFile 的构造函数创建一个 JarFile 实例,这个...
在Java项目工程中,打包过程可能包括编译源代码、复制资源文件、生成类文件、创建或更新manifest文件,然后将这些元素整合到jar、tar或zip文件中。IDEs如Eclipse、IntelliJ IDEA和Maven、Gradle等构建工具都提供了...
1. **Java ClassLoader**: 读取JAR或WAR包内的文件通常需要借助Java的ClassLoader。ClassLoader是Java中负责加载类的组件,它知道如何从不同的源(如文件系统、网络或ZIP文件)加载类和资源。 2. **getResource() ...
Java打包工具Fat-Jar是Java开发者在构建可执行的独立JAR文件时经常会用到的一种工具。它解决了Java应用程序依赖于多个外部库的问题,能够将所有必要的类和库资源打包进一个单一的JAR文件中,使得用户可以简单地通过...
总结来说,Java中的打包可执行文件涉及到JAR文件的创建、清单文件的编写、使用构建工具自动化打包过程,以及可能的批处理加载逻辑。了解这些概念和技术对于Java开发者来说非常重要,能够帮助他们有效地部署和管理...
为了创建一个可执行的JAR包,你可以使用构建工具(如Maven或Gradle)将你的Java代码打包成JAR,并确保所有依赖项都被包含在内。 总之,`mpxj`是Java开发者处理MPP文件的强大工具,它简化了与Microsoft Project文件...
这种方法允许你在打包后的JAR或WAR文件中正确地访问资源。 6. **处理资源路径**: - 文件路径可能需要根据运行环境进行调整。例如,开发阶段文件可能在`src/main/resources`,但在生产环境中,它们可能被复制到了`...
Java打包工具Fatjar插件是Java开发者在构建可执行的JAR文件时常常使用的工具,尤其对于那些希望将所有依赖库合并到一个独立的JAR中的项目非常实用。Fatjar这个名字来源于它能创建的“肥胖”JAR,因为它将所有依赖的...
总结,打包JAR包并在其中读取外部JAR和配置文件,需要理解Java类路径的概念,熟练运用Eclipse的打包功能,以及正确处理MANIFEST.MF文件。同时,掌握使用构建工具如Maven或Gradle会大大提高效率。在实际项目中,确保...
在软件开发过程中,特别是对于 Java 开发者来说,将多个 `.class` 文件打包成一个 `.jar` 文件是非常常见且实用的操作。这种方式不仅便于程序的分发与部署,还能有效管理项目的依赖关系。本文将详细介绍如何将 Java ...
Java编程语言以其跨平台性和丰富的库支持而广受欢迎,但为了在不同的系统上运行Java程序,我们需要将编译后的.class文件打包成一个可执行的JAR(Java Archive)文件。本篇文章将详细介绍如何使用C++编写一个小程序来...
- 使用`java.util.jar.JarFile`类可以打开并读取JAR文件。这个类提供了访问JAR内容的方法,如`getEntry()`和`getInputStream()`,可以用来获取指定条目的输入流。 - 例如,要读取`DbParamDlg.class`,你可以创建`...