天天看點

執行可運作jar包時讀取jar包中的檔案

可運作的jar包,都會在meta-inf\manifest.mf中設定main-class。

那麼如何在jar包中讀取其中的某個檔案呢?

注意:是在可運作的jar包中讀取該jar包中的檔案,也就是說讀取jar包中檔案的這段代碼在該jar包中

執行可運作jar包時讀取jar包中的檔案

 testurl類内容如下:

執行可運作jar包時讀取jar包中的檔案

import java.io.ioexception;  

import java.io.inputstream;  

import java.net.malformedurlexception;  

import java.net.url;  

import com.common.util.systemhwutil;  

import com.io.hw.file.util.fileutils;  

public class testurl {  

    public static final string jar_meta_inf="meta-inf";  

    /** 

     * @param args 

     */  

    public static void main(string[] args) {  

        // url url= new  

        // url("jar:file:/d:/eclipse/workspace/jetty_icserver/jetty_icserver-0.0.1-snapshot.jar!/contexts");  

        string jarbasepath=getjarpath("com");  

        system.out.println(jarbasepath);  

        try {  

            url url=new url(jarbasepath+"/com/jn/url/a.txt");  

            inputstream in= url.openstream();  

            system.out.println("content:"+fileutils.getfullcontent3(in,systemhwutil.charset_utf));  

            system.out.println(url);  

        } catch (malformedurlexception e) {  

            e.printstacktrace();  

        } catch (ioexception e) {  

        }  

    }  

    /*** 

     *  

     * @param tag  : 必須是jar包根目錄下的目錄或檔案 

     * @return 

    public static string getjarpath(string tag){  

        if(tag==null){  

            tag=jar_meta_inf;  

        url url = testurl.class.getresource("/"+tag);  

        system.out.println("url1:"+url);  

        string urlpath=url.tostring();//jar:file:/d:/eclipse/workspace/test_url/target/test_url-0.0.1-snapshot.jar!/meta-inf  

        int index=urlpath.indexof(".jar!/"+tag);  

        return  urlpath.substring(0, index+5);  

    public static string getjarpath(){  

        return getjarpath(null);  

}  

 打成jar包之後運作如下:

執行可運作jar包時讀取jar包中的檔案

繼續閱讀