可運作的jar包,都會在meta-inf\manifest.mf中設定main-class。
那麼如何在jar包中讀取其中的某個檔案呢?
注意:是在可運作的jar包中讀取該jar包中的檔案,也就是說讀取jar包中檔案的這段代碼在該jar包中
testurl類内容如下:
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包之後運作如下: