簡體   English   中英

從 jar 中獲取 csv 文件

[英]get csv file from jar

我有以下代碼行:

InputStreamReader isr = new InputStreamReader(MethodHandles.lookup().lookupClass().getResourceAsStream(csvFile));

有人可以向新手解釋一下:

MethodHandles.lookup()
lookupClass()
getResourceasStream()

該代碼工作並訪問位於 jar 中的 csv 文件。 我只是不明白每種方法在做什么

我能夠將這條線簡化為:

InputStreamReader isr = new InputStreamReader (SQLUtilPROD.class.getResourceAsStream (csvFile));

但還是很困惑。 SQLUtilProd.class 有什么作用? 以及 getResourceAsStream 如何知道從 jar 中獲取文件? 如果你有多個 jar 會發生什么?

不確定,但我認為我們使用 SQLUtil.class 來獲取類對象,這反過來又讓我們可以訪問 getResourceAsStream 用來定位文件的 classLoader。

如果這是真的,classLoader 在哪里定義包含 jar 的路徑?

SQLUtilProd.class 有什么作用?

每個對象的數據都包含對 java.lang.Class 類對象的引用,該引用由方法 getClass 返回。 還有一個 java.lang.Class 對象描述 java.lang.Class。 請在鏈接中閱讀更多內容。

getResourceAsStream 如何知道從 jar 中獲取文件?

getResourceAsStream將在類路徑上找到具有給定名稱的資源。 搜索與給定類相關聯的資源的規則由的定義類加載器實現。 請訪問鏈接。

如果你有多個 jar 會發生什么?

您可以使用這樣的輔助函數獲取所有資源:

public static List<InputStream> loadResources(
        final String name, final ClassLoader classLoader) throws IOException {
    final List<InputStream> list = new ArrayList<InputStream>();
    final Enumeration<URL> systemResources = 
            (classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader)
            .getResources(name);
    while (systemResources.hasMoreElements()) {
        list.add(systemResources.nextElement().openStream());
    }
    return list;
}

我相信閱讀此鏈接會對您有所幫助。

classLoader 在哪里定義包含 jar 的路徑?

系統 ClassLoader 提供對CLASSPATH 中信息的訪問。 CLASSPATH 可能包含目錄和 JAR 文件。 因此,您可以訪問項目的所有資源和類路徑中的 jar 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM