读书人

读取Jar包中的资源有关问题探究

发布时间: 2013-10-08 17:02:59 作者: rapoo

读取Jar包中的资源问题探究

最近在写一个可执行jar的程序,程序中包含了2个资源包,一个是images,一个是files。问题来了,在Eclipse里开发的时候,当用File类来获取files下面的文件时,没有任何问题。但是当程序导出为Runnable Jar时,运行程序时抛出异常,File not found。我们来一探究竟。

首先是我的工程目录结构:

读取Jar包中的资源有关问题探究

程序中访问images下的图片代码:

import java.io.*;  public class Resource {      public void getResource() throws IOException{          //返回读取指定资源的输入流          InputStream is=this.getClass().getResourceAsStream("/resource/res.txt");           BufferedReader br=new BufferedReader(new InputStreamReader(is));          String s="";          while((s=br.readLine())!=null)              System.out.println(s);      }  }  

我们将java工程下/bin目录中的edu/hxraid/Resource.class和资源文件resource/res.txt一并打包进ResourceJar.jar中,不管jar包在系统的任何目录下,调用jar包中的Resource类都可以获得jar包中的res.txt资源,再也不会找不到res.txt文件了。

后话:

当然现在有jar包可以直接用于解决这个问题。

当然这种工作,前人也早已经研究过了。XWork中有个工具类,叫做ClassLoaderUtil,可以深入读取jar包中的资源文件。Struts2就是用这个工具类读取所有的plugin中的struts-default.xml的。例如用户可以下载xwork-core-2.1.4-jdk14.jar,里面包括有一个类ClassLoaderUtil.java,其中的静态函数

getResourceAsStream(String resourceName,Class callingClass)也可以解决这个问题。

ClassLoaderUtil.getResourceAsStream("wei.txt",String.class);


读书人网 >编程

热点推荐