簡體   English   中英

訪問.jar中的數據

[英]Accessing Data inside of a .jar

我目前正在將一個程序放入.jar中,並且難以告訴它從哪里獲取數據。 數據位於項目中的文件內部,我確信它也位於jar中。 但我不知道如何獲得一個罐子的路徑。

我在網上找到了getClass().getClassLoader().getResourceAsStream()方法來獲取輸入流到jar中,但由於我一直使用FileReaders ,所以我也不知道該如何處理它。

我非常感謝任何幫助。

編輯:

以下是目錄組織方式的圖片: 控制台顯示解決方案,因為一切實際運行

我的命令窗口顯示如果我運行.jar會發生什么。 第30行中的Nullpointer。我嘗試使用和不使用.getClassLoader(),它只是找不到它。 這是jar的內部: 再次,app是類文件所在的位置。因此,通過class.getResource ..我應該能夠在DataPackeg中搜索。 伙計,這是我的意思。

要理解的一個關鍵概念是jar文件中不存在文件 您必須將數據作為只讀資源獲取,並且需要使用與類文件路徑相關的路徑。

如果你仍然卡住,你可能需要告訴我們更多關於你當前程序,它的結構,你想要獲得的數據類型,它在jar文件中的位置以及你如何使用它的細節它。

例如,假設您的包結構如下所示:

在此輸入圖像描述

所以類文件位於codePackage包中(這是Eclipse所以類文件存在於與java文件並行的Universe中),並且資源的位置在codePackage.images包中,但相對於類文件,它是images目錄,您可以像這樣使用資源:

package codePackage;

import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class ClassUsesResources {
   private JLabel label = new JLabel();

   public ClassUsesResources() {
      try {
         BufferedImage img = ImageIO.read(getClass().getResourceAsStream(
               "images/img001s.jpg"));
         ImageIcon icon = new ImageIcon(img);
         label.setIcon(icon);

         JOptionPane.showMessageDialog(null, label);
      } catch (IOException e) {
         e.printStackTrace();
         System.exit(-1);
      }
   }

   public static void main(String[] args) {
      new ClassUsesResources();
   }
}

暫無
暫無

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

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