亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

 

現(xiàn)在演示文件輸出,把jar包內(nèi)的test文件夾里面的那個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()) {// 父目錄不存在時先創(chuàng)建
	fp.mkdirs();
}
if (!f.exists()) {// 文件不存在時先創(chuàng)建
	f.createNewFile();
}
OutputStream os = new FileOutputStream(f);// 創(chuàng)建輸出流
int index = 0;// 當前讀取的位數(shù)
byte[] bytes = new byte[1024];// 指定每次讀取的位數(shù),這里以1024為例
// 開始讀取文件,一遍讀取一邊輸出文件。每次讀取1024的長度并儲存于bytes這個數(shù)組中,然后寫入至目標文件
while ((index = is.read(bytes)) != -1) {
	os.write(bytes, 0, index);// 輸出文件,write()方法參數(shù)分別為:寫入的數(shù)據(jù)、開始寫入的位置(0為從開頭寫入),寫入長度
}
// 關閉流并保存文件
os.flush();
os.close();
is.close();

這里要說明的重點是

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

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

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

這里因為是讀取jar內(nèi)的文件,所以路徑用classpath方式表示。上面的Test.class.getResourceAsStream()就是以Test這個類的位置為出發(fā)點。括號里面的參數(shù)就是在jar包中,以Test類為準的相對路徑。

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

舉個例子:

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

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

這時就是以絕對路徑方式找到文件。雖然指定了Test.class,但是因為是絕對路徑,路徑就與Test類無關了。

jar包的動態(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的動態(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");  
        }  
  
  
    }  
}  

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

相關文章

  • MyBatis?SqlSource源碼示例解析

    MyBatis?SqlSource源碼示例解析

    這篇文章主要為大家介紹了MyBatis?SqlSource源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • SpringBoot實現(xiàn)熱部署Community的示例代碼

    SpringBoot實現(xiàn)熱部署Community的示例代碼

    本文主要介紹了SpringBoot實現(xiàn)熱部署Community的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 基于controller使用map接收參數(shù)的注意事項

    基于controller使用map接收參數(shù)的注意事項

    這篇文章主要介紹了基于controller使用map接收參數(shù)的注意事項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中BigDecimal精度和相等比較的坑

    Java中BigDecimal精度和相等比較的坑

    BigDecimal是一種精確的數(shù)字類,一般用于高精度的開發(fā)領域中,例如銀行。下面這篇文章主要給大家介紹了關于Java中BigDecimal精度和相等比較的坑的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 詳解在Spring Boot中使用Mysql和JPA

    詳解在Spring Boot中使用Mysql和JPA

    本文向你展示如何在Spring Boot的Web應用中使用Mysq數(shù)據(jù)庫,也充分展示Spring Boot的優(yōu)勢
    2017-04-04
  • Java簡明解讀代碼塊的應用

    Java簡明解讀代碼塊的應用

    所謂代碼塊是指用"{}"括起來的一段代碼,根據(jù)其位置和聲明的不同,可以分為普通代碼塊、構(gòu)造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上 synchronized關鍵字,則此代碼塊就成為同步代碼塊
    2022-07-07
  • 使用Java servlet實現(xiàn)自動登錄退出功能

    使用Java servlet實現(xiàn)自動登錄退出功能

    這篇文章主要介紹了使用Java servlet實現(xiàn)自動登錄退出功能,,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 解決spring-integration-mqtt頻繁報Lost connection錯誤問題

    解決spring-integration-mqtt頻繁報Lost connection錯誤問題

    這篇文章主要介紹了解決spring-integration-mqtt頻繁報Lost connection錯誤問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 深入理解Java Socket通信

    深入理解Java Socket通信

    本篇文章主要介紹了深入理解Java Socket,Java中的網(wǎng)絡通信是通過Socket實現(xiàn)的,Socket分為ServerSocket和Socket兩大類,有興趣的可以了解一下
    2017-02-02
  • Java基礎之引用相關知識總結(jié)

    Java基礎之引用相關知識總結(jié)

    今天聊聊Java的引用,大多數(shù)時候我們說引用都是強引用,只有在對象不使用的情況下才會釋放內(nèi)存,其實Java 內(nèi)存有四種不同的引用.一起看看吧,,需要的朋友可以參考下
    2021-05-05

最新評論