Доступ к данным внутри .jar - PullRequest
       17

Доступ к данным внутри .jar

4 голосов
/ 24 сентября 2011

Я в настоящее время помещаю программу в .jar, и мне трудно сказать, откуда взять ее данные.Данные были внутри файла в проекте, и я уверен, что он также находится в банке.Но я понятия не имею, как попасть в банку.

Я нашел способ getClass().getClassLoader().getResourceAsStream() онлайн, чтобы получить входной поток в банку, но так как я все время использовал FileReaders, я тоже не знаю, что с ним делать ..

Я был бы очень благодарен за любую помощь.

Редактировать:

Вот изображение того, как организован каталог: The console displays a solution, since everything actually runs

В моем окне команд показаночто произойдет, если я запусту .jar.Nullpointer в строке 30. Я попробовал с и без .getClassLoader (), он просто не найдет его.Вот внутренняя часть jar: снова , приложение находится там, где находятся файлы классов. Следовательно, через class.getResource .. Я должен иметь возможность искать в DataPackeg.Чувак, это меня утомляет.

1 Ответ

4 голосов
/ 24 сентября 2011

Ключевым понятием, которое нужно понять, является то, что файлов не существует внутри jar .Вместо этого вы должны получить данные в качестве ресурса, доступного только для чтения, и вам нужно будет использовать путь относительно пути к файлам ваших классов.

Если вы все еще застряли, возможно, вам придется сообщить намболее подробную информацию о вашей текущей программе, ее структуре, типе данных, которые вы пытаетесь получить, где он находится в файле JAR и как вы пытаетесь его использовать.

Например, скажем, вашСтруктура пакета выглядела так:

enter image description here

Таким образом, файл класса находится в пакете codePackage (это Eclipse, поэтому файлы классов живут во вселенной, параллельной файлам java),и местоположение ресурса находится в пакете codePackage.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();
   }
}
...