Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка ресурсов. Загрузка ресурсов методом getResource() 
:(
    Опции темы
Terentich
Дата 16.1.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Здравствуйте!

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

Подскажите, пожалуйста, возможные пути решения.
PM MAIL   Вверх
jk1
Дата 16.1.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Изначально дописать нужную папку в classpath


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Terentich
Дата 16.1.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Так и есть. Папка прописана в classpath, а мне нужны файлы внутри неё. Проблема в том, что точных имён файлов я не знаю, мне надо просмотреть что в папке лежит. 
PM MAIL   Вверх
jk1
Дата 16.1.2010, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Если знаете название папки, смотрите так:
Код

 File targetFolder =new  File("c:/"); // это ваша папка
        for(File file:targetFolder.listFiles()){
            if (!file.isDirectory()) {
                ImageIcon icon = new ImageIcon(file.getAbsolutePath());
                System.out.println("Icon created: " + icon.toString());
            }
        }



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
LSD
Дата 16.1.2010, 17:45 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Terentich @  16.1.2010,  14:00 Найти цитируемый пост)
как я понимаю, метод getResource() позволяет лишь загружать конкретные файлы

Неправильно понимаешь. Загружать позволяет getResourceAsStream(), а getResource() возвращает URL этого ресурса. Проанализировав этот URL (как минимум выяснив протокол) можно попытаться получить все соседние ресурсы.

В твоем конкретном случае надо проверить, что протокол file, дальше new java.io.File(URI)getParent() и вперед.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Terentich
Дата 16.1.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



jk1, так не получится. Не могу указать абсолютный путь, потому что данный код выполняется библиотекой и все пути должны быть относительными, чтобы можно было использовать в других программах.
Если же укажу относительный путь, то метод listFiles() возвратит пустой массив, так как приложение будет выполнятся из другой папки - папки приложения. 

К примеру, я храню папку "icons" здесь: "C:/lib/icons".
Для доступа к ней в библиотеке использую относительный путь "icons", но возникнет проблема, так как если запущу приложение из папки "C:/app", то библиотека будет искать папку по пути: "C:/app/icons", что неверно.

LSD, спасибо, но getResourceAsStream() и getResource() вернули null. :(

Это сообщение отредактировал(а) Terentich - 16.1.2010, 19:54
PM MAIL   Вверх
dorogoyIV
Дата 16.1.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



ну тогда для начала нужно найти файлы, оттуда получить абсолютные пути, ну и т.д. ...
PM MAIL   Вверх
Terentich
Дата 16.1.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Как же я могу найти файлы, если мне неизвестно содержимое папки "icons"?
В том-то вся и проблема, что я знаю лишь имя папки, а мне нужно её содержимое.
PM MAIL   Вверх
jk1
Дата 16.1.2010, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Terentich,  поставьте пожалуйста задачу конкретно. Например, так "Есть (сетевая, локальная) папка о которой известно ... . Нужно из её содержимого сделать....  ". Желательно с примером для большей ясности.

Об относительных путях: если относительный путь валиден, то за исключением некоторых случаев (зацикленных символических ссылок например) он может быть разрешен в абсолютный методом getAbsolutePath();

Это сообщение отредактировал(а) jk1 - 16.1.2010, 21:08


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Terentich
Дата 16.1.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Да, пожалуй, сумбурно описал.  smile 

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

В самой библиотеке мне нужно получить ссылки на файлы из папки "icons". Как это сделать?

Надеюсь, что понятно описал.


Это сообщение отредактировал(а) Terentich - 16.1.2010, 21:48
PM MAIL   Вверх
Terentich
Дата 17.1.2010, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Все же официальную документацию надо читать в первую очередь, столько времени убил. :(

Но это так мне и не помогло с загрузкой папки с ресурсами.

Это сообщение отредактировал(а) Terentich - 17.1.2010, 00:43
PM MAIL   Вверх
dobrolub
Дата 17.1.2010, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Здорово, коли ни шутишь.
InputStream с ресурса-директории просто будет содержать имена директорий и файлов, вот построчно их и читай. smile
Код

tmp $mkdir -p x/y/z
tmp $echo a >x/y/z/a.inc
tmp $echo a >x/y/z/b.inc
tmp $jar -cf x.jar x
tmp $jar -t x.jar
^Ctmp $jar -tf x.jar
META-INF/
META-INF/MANIFEST.MF
x/
x/y/
x/y/z/
x/y/z/a.inc
x/y/z/b.inc


Код

import java.io.*;

public class T {
    public static void main(String []args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(T.class.getClassLoader().getResourceAsStream("x/y/z")));
        String str;

        while ((str = reader.readLine()) != null)
               System.out.println("file: " + str);
    }
}


Код

tmp $java -cp .:x.jar T
file: a.inc
file: b.inc



Это сообщение отредактировал(а) dobrolub - 17.1.2010, 07:58
PM   Вверх
Terentich
Дата 17.1.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



dobrolub, не выходит.

Метод

Код

T.class.getClassLoader().getResourceAsStream(pathname);


возвращает null.

Я работаю в Eclipse и эту папку подключаю как "Class folder" (Java Build Path -> Add Class folder), т. е. как папку, содержащую классы.
Может быть это неверно?
PM MAIL   Вверх
dobrolub
Дата 17.1.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Возможно eclipse немного углубился в директории при добавлении и добавил вместо корня первую папку под корнем.

Например если у тебя пакет x/y/z находящийся в папке /tmp то надо убедится, что именно папка /tmp добавлена, а не папка /tmp/x

Посмотри на тест- проект в прикреплённом test.jar



Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  test1.zip 4,75 Kb
PM   Вверх
LSD
Дата 18.1.2010, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Terentich @  16.1.2010,  19:31 Найти цитируемый пост)
LSD, спасибо, но getResourceAsStream() и getResource() вернули null. :(

Потому, что он возвращает именно Resource, а не папку или еще какую подобную фигню.

В принципе самый нормальный способ это создать файл со списком иконок (имя его разумеется фиксировано). Читать этот файл и уже тогда грузить иконки. Все остальное извраты с ClassLoader очень ненадежны. Если например твое приложение будет использоваться в апплете и ClassLoader будет сетевой, но никакого listFiles() там может и не быть.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.