2010-07-09 2 views
2

Я уверен, что это основной вопрос, я просто не могу понять это Я пытаюсь загрузить кучу изображений, расположенных в изображениях вложенного моего проектаloadResourceasStream из подпапки Java проекта

вот мой код

package com.ieml.swt.diploma; 

import java.io.InputStream; 



public class loadTest 
{ 


    public static void main(String[] args) 
    { 

System.out.println(getResourceImage("marks.png")); 
    } 


    public static InputStream getResourceImage(String fileName) { 

     return loadTest.class.getResourceAsStream("./images/" + fileName); 
    } 
} 

у меня есть Separe папки для Src и файлов классов так .java файл находится в SRC/ком/ИЭУП/С.Т./диплом папки и .class файл под бункером/ком/ИЭУП/С.Т./Дипломная папка
Файлы, которые я пытаюсь загрузить здесь, существуют в «loadT» est/images "вложенной папки loadTest является корневым каталогом моего проекта it justs print s null, так как он не загружает этот файл утра.

ответ

5
loadTest.class.getResourceAsStream("./images/" + fileName); 

Это будет выглядеть для изображений под bin/com/ieml/swt/diploma/images, то есть по отношению к файлу .class. Если вы оставите точку в начале, она будет выглядеть в bin/images.

Но что бы вы ни делали, Class.getResourceAsStream() для загрузки ресурсов из, классов, т.е. внутри папки bin. Нет никакого способа получить доступ к чему-либо снаружи, и это не имеет никакого смысла, так как оно предназначено для работы с JAR-файлами. Обычно вы фактически кладете ресурсы в папку src и копируете их в bin во время сборки (затмение будет делать это автоматически).

+0

Hah, избили меня на нем :) – Gennadiy

+0

ye У меня был копируя идею на мой взгляд в этой ситуации, это было бы не проблема, но что, если мои файлы размером 5-10 МБ в каждом? ». поэтому я решил поместить их в отдельную папку, а не в корзину. поэтому я попробовал загрузить loadTest.class.getClassLoader(). getResourceAsStream ("./ images /" + fileName); и loadTest.class.getClassLoader(). getResourceAsStream ("/ images /" + имя_файла); не повезло, не могли бы вы объяснить, где он пытается найти файл в последних двух случаях? – usmazat

+0

@usmazat: в обоих случаях он будет выглядеть в bin/images. Как я уже сказал: getResourceAsStream() * не может * выйти за пределы класса, независимо от того, что вы делаете. Копирование нескольких файлов размером 10 МБ не является большой проблемой, тем более что вам не нужно делать полную сборку очень часто с хорошей IDE. –

0

Я считаю, что Class.getResourceAsStream примет пути относительно местоположения файла класса, в вашем случае - папку classes/com/ieml/swt/diploma. Вы можете попробовать

loadTest.class.getClassLoader().getResourceAsStream("../images/" + filename); 

Я предполагаю, что ваша папка с изображениями находится на том же уровне, что и папка с ячейками или папками. Основная идея заключается в том, что вы можете получить ресурс по относительному пути от вашего корневого загрузчика root (вашего корня classpath).

Это не всегда хорошая идея, но поскольку это выглядит как школьный проект, я не думаю, что это было бы проблемой.

1

Метод getResourceAsStream() загружает ресурсы classpath. Является ли каталог изображений в вашем пути к классам?

0

В зависимости от того, что вы пытаетесь сделать, это может быть неправильный путь. getResourceAsStream обычно используется для загрузки значков из jar в пути к классам. Если вы просто пытаетесь получить изображение на диске по какой-то причине, взгляните на статические методы на javax.imageio.ImageIO: http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/

Смежные вопросы