最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中實(shí)現(xiàn)將jar包內(nèi)文件資源釋放出來

 更新時(shí)間:2022年08月17日 09:24:20   作者:「已注銷」  
這篇文章主要介紹了Java中實(shí)現(xiàn)將jar包內(nèi)文件資源釋放出來的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java將jar包內(nèi)文件資源釋放出來

有些時(shí)候我們需要讀取并釋放jar包內(nèi)文件到j(luò)ar包外。這樣其實(shí)很簡單,使用InputStream和OutputStream即可。

文件在jar包中時(shí),一般是先讀取他們,再輸出。以我這里為例:

可以看到我這里的代碼文件目錄結(jié)構(gòu),代碼文件夾根目錄下有一個(gè)a.txt,還有一個(gè)test文件夾,其中有一個(gè)Test類和b.txt,sda.pdf。

打包為jar后結(jié)構(gòu)不變,如下:

 

現(xiàn)在演示文件輸出,把jar包內(nèi)的test文件夾里面的那個(gè)sda.pdf輸出,代碼如下:

InputStream is = Test.class.getResourceAsStream("sda.pdf");// 流式讀取jar包內(nèi)文件,使用classpath
File f = new File("E:\\中轉(zhuǎn)\\tio\\a\\out.pdf");// 指定輸出文件
File fp = new File(f.getParent());// 輸出文件的父目錄
if (!fp.exists()) {// 父目錄不存在時(shí)先創(chuàng)建
	fp.mkdirs();
}
if (!f.exists()) {// 文件不存在時(shí)先創(chuàng)建
	f.createNewFile();
}
OutputStream os = new FileOutputStream(f);// 創(chuàng)建輸出流
int index = 0;// 當(dāng)前讀取的位數(shù)
byte[] bytes = new byte[1024];// 指定每次讀取的位數(shù),這里以1024為例
// 開始讀取文件,一遍讀取一邊輸出文件。每次讀取1024的長度并儲(chǔ)存于bytes這個(gè)數(shù)組中,然后寫入至目標(biāo)文件
while ((index = is.read(bytes)) != -1) {
	os.write(bytes, 0, index);// 輸出文件,write()方法參數(shù)分別為:寫入的數(shù)據(jù)、開始寫入的位置(0為從開頭寫入),寫入長度
}
// 關(guān)閉流并保存文件
os.flush();
os.close();
is.close();

這里要說明的重點(diǎn)是

InputStream is = Test.class.getResourceAsStream("sda.pdf");

這就是流式讀取文件,其語法是:

InputStream is = 類名.class.getResourceAsStream("文件路徑");

這里因?yàn)槭亲x取jar內(nèi)的文件,所以路徑用classpath方式表示。上面的Test.class.getResourceAsStream()就是以Test這個(gè)類的位置為出發(fā)點(diǎn)。括號(hào)里面的參數(shù)就是在jar包中,以Test類為準(zhǔn)的相對(duì)路徑。

當(dāng)然也可以使用絕對(duì)路徑。文件路徑以"/"開頭的就是絕對(duì)路徑,絕對(duì)路徑不再是以類為出發(fā)點(diǎn),/就代表jar包的根目錄。

舉個(gè)例子:

如果要讀取上述jar包內(nèi)根目錄下的a.txt,那就要這樣寫:

InputStream is = Test.class.getResourceAsStream("/a.txt");

這時(shí)就是以絕對(duì)路徑方式找到文件。雖然指定了Test.class,但是因?yàn)槭墙^對(duì)路徑,路徑就與Test類無關(guān)了。

jar包的動(dòng)態(tài)加載和釋放

import sun.misc.ClassLoaderUtil;  
import java.io.File;  
import java.lang.reflect.Constructor;  
import java.lang.reflect.Method;  
import java.net.MalformedURLException;  
import java.net.URL;  
import java.net.URLClassLoader;  
  
/** 
 * java jar的動(dòng)態(tài)加載和釋放 
 */  
public class TestMain {  
  
  
    public static void main(String[] args) throws MalformedURLException, Exception {  
  
        System.out.println(new File(".").getAbsolutePath());  
        URLClassLoader urlClassLoader=new URLClassLoader(new URL[]{new URL("file:C:\\Users\\Administrator\\IdeaProjects\\test\\data.jar")});  
       Class classStudentServiceImpl=  urlClassLoader.loadClass("StudentServiceImpl");  
       Method method= classStudentServiceImpl.getMethod("getName",new Class[]{});  
        Constructor localConstructor = classStudentServiceImpl.getConstructor(new Class[] {});  
        Object instance = localConstructor.newInstance(new Object[] {});  
       Object ret= method.invoke(instance);  
        System.out.println(ret);  
  
        ClassLoaderUtil.releaseLoader(urlClassLoader);  
        while(true)  
        {  
            Thread.sleep(1000);  
            System.out.println("run");  
        }  
  
  
    }  
}  

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評(píng)論

郑州市| 东明县| 瑞丽市| 金昌市| 遂平县| 神农架林区| 额敏县| 庆云县| 锦屏县| 和龙市| 正安县| 公安县| 威海市| 黔南| 将乐县| 比如县| 梧州市| 长丰县| 永和县| 清水河县| 屏南县| 阿图什市| 循化| 应用必备| 太保市| 永和县| 信宜市| 永吉县| 辉南县| 沾益县| 正安县| 岢岚县| 黄平县| 南皮县| 阿克| 绥江县| 横峰县| 锡林浩特市| 永福县| 琼中| 新津县|