2015-07-11 1 views
2

У меня есть функция loadImage для получения изображений. Это не работает, когда я пытаюсь получить файл из функции getFile().Есть ли способ получить файл из папки res с помощью метода ClassLoader и getClass()

public BufferedImage loadImage(String img) { 
    BufferedImage bimg = null; 
    try { 
     bimg = ImageIO.read(new File("res/" + img)); 
    } catch (Exception e1) { 
     try { 
      bimg = ImageIO.read(ClassLoader.getSystemResource("res/" + img)); 
     } catch (Exception e2) { 
      try { 
       bimg = ImageIO.read(getClass().getResource("res/" + img)); 
      } catch (Exception e3) { 
       System.out.println("Cannot load image: " + img); 
      } 
     } 
    } 
    return bimg; 
} 

Я попытался с помощью следующей функции:

public File getFile(String file) { 
    File f = null; 
    try { 
     f = new File("res/" + file); 
    } catch (Exception e1) { 
     try { 
      f = new File(ClassLoader.getSystemResource("res/" + file).getFile()); 
     } catch (Exception e2) { 
      try { 
       f = new File(getClass().getResource("res/" + file).getFile()); 
      } catch (Exception e3) { 
       System.out.println("Cannot load File: " + file); 
      } 
     } 
    } 
    return f; 
} 

Эти функции находятся в баночке Lib и мой другой проект хотят получить файл из баночки Lib.

Это в моем проекте пытается получить config.cfg файл из баночки Lib

File file = files.getFile("config.cfg"); 

Я открыл банку и проверил, если файл существует в банке.

+1

Ужасного исключение ловли – m0skit0

+0

Когда я получаю путь он дает мне этот файл:/C:/Пользователи/8803286/Dropbox/Workspace/Eclipse/Programs/Sinx% 20Core/build/jar/SinxCore.jar! /res/config.cfg – 8803286

ответ

1

Вы можете использовать класс. getResourceAsStream(String name). Например, если у вас есть "/data/config.cfg" в файле фляга, то вы можете открыть файл для чтения, используя следующую строку:

InputStream is = this.getClass().getResourceAsStream("/data/config.cfg"); 
+0

Спасибо, что сработал – 8803286

0

Это зависит от вашей упаковки.

Помните, что вам не нужно упаковывать приложение в виде файла jar - оно может быть в не упакованной форме, содержащей классы в разделенных каталогах (как в файле jar, но без него).

Получение File в Java - это как получение файла в операционной системе, из которой выполняется ваше приложение. Поэтому, если у вас есть форма «не-jar», тогда ваш код будет работать нормально. Но если у вас есть приложение JAR, ваша операционная система должна будет поддерживать операции с упакованными файлами (jar - это фактически ZIP-архив), как и в непакетированных файлах. Однако я не знаю такого случая.

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

EDIT: По вашему комментарию, у вас есть JAR форму. В этом случае получение файла как File из ресурсов не будет работать вообще.

+0

Но работа с изображениями почему бы не заставить файл работать? – 8803286

+0

Вот почему у меня есть инструкция try, если новый файл() не смог получить файл, а затем перейти к следующему – 8803286