当前位置:文档之家› JAVA打包后读取自身JAR中的文件

JAVA打包后读取自身JAR中的文件


以上两行代码采用了下面两条 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 () ; } }
标签: 分类: Computer and I
杂谈Biblioteka 在编写完 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); 以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前), 是没有问题的, 但在打包后,由于所有图片文件和文本文件都将打包到 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")) ;
相关主题