loadResourceasStream из подпапки проекта Java - PullRequest
2 голосов
/ 10 июля 2010

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

вот мой код

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);
    }
}

У меня есть отдельные папки для файлов src и class поэтому файл .java находится в папке src / com / ieml / swt / diploma и .class файл в папке bin / com / ieml / swt / diploma
файлы, которые я пытаюсь загрузить, существуют в подпапке «loadTest / images». loadTest - это корневой каталог моего проекта. он печатает ноль, как будто он не загружает этот файл я что-то здесь упускаю?

Ответы [ 4 ]

5 голосов
/ 10 июля 2010
loadTest.class.getResourceAsStream("./images/" + fileName);

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

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

1 голос
/ 10 июля 2010

Метод getResourceAsStream () загружает ресурсы пути к классам.Каталог images в вашем classpath?

0 голосов
/ 10 июля 2010

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

0 голосов
/ 10 июля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...