Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Загрузка ресурсов. |
Автор: Terentich 16.1.2010, 14:00 |
Здравствуйте! Очень нужно загрузить папку с ресурсами, однако, как я понимаю, метод getResource() позволяет лишь загружать конкретные файлы, а это мне не подходит. Подскажите, пожалуйста, возможные пути решения. |
Автор: jk1 16.1.2010, 14:36 |
Изначально дописать нужную папку в classpath |
Автор: Terentich 16.1.2010, 15:36 |
Так и есть. Папка прописана в classpath, а мне нужны файлы внутри неё. Проблема в том, что точных имён файлов я не знаю, мне надо просмотреть что в папке лежит. |
Автор: jk1 16.1.2010, 17:16 | ||
Если знаете название папки, смотрите так:
|
Автор: Terentich 16.1.2010, 19:31 |
jk1, так не получится. Не могу указать абсолютный путь, потому что данный код выполняется библиотекой и все пути должны быть относительными, чтобы можно было использовать в других программах. Если же укажу относительный путь, то метод listFiles() возвратит пустой массив, так как приложение будет выполнятся из другой папки - папки приложения. К примеру, я храню папку "icons" здесь: "C:/lib/icons". Для доступа к ней в библиотеке использую относительный путь "icons", но возникнет проблема, так как если запущу приложение из папки "C:/app", то библиотека будет искать папку по пути: "C:/app/icons", что неверно. LSD, спасибо, но getResourceAsStream() и getResource() вернули null. :( |
Автор: dorogoyIV 16.1.2010, 20:11 |
ну тогда для начала нужно найти файлы, оттуда получить абсолютные пути, ну и т.д. ... |
Автор: Terentich 16.1.2010, 20:23 |
Как же я могу найти файлы, если мне неизвестно содержимое папки "icons"? В том-то вся и проблема, что я знаю лишь имя папки, а мне нужно её содержимое. |
Автор: jk1 16.1.2010, 21:05 |
Terentich, поставьте пожалуйста задачу конкретно. Например, так "Есть (сетевая, локальная) папка о которой известно ... . Нужно из её содержимого сделать.... ". Желательно с примером для большей ясности. Об относительных путях: если относительный путь валиден, то за исключением некоторых случаев (зацикленных символических ссылок например) он может быть разрешен в абсолютный методом getAbsolutePath(); |
Автор: Terentich 16.1.2010, 21:38 |
Да, пожалуй, сумбурно описал. ![]() Пишу библиотеку, которую будут использовать другие программы, подключая её как jar-файл в classpath. В jar-файле библиотеки я храню локальную папку "icons" (об этой папке известно лишь то, что она содержит графические файлы). В самой библиотеке мне нужно получить ссылки на файлы из папки "icons". Как это сделать? Надеюсь, что понятно описал. |
Автор: Terentich 17.1.2010, 00:31 |
Все же http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html#getresource надо читать в первую очередь, столько времени убил. :( Но это так мне и не помогло с загрузкой папки с ресурсами. |
Автор: dobrolub 17.1.2010, 06:29 | ||||||
Здорово, коли ни шутишь. InputStream с ресурса-директории просто будет содержать имена директорий и файлов, вот построчно их и читай. ![]()
|
Автор: Terentich 17.1.2010, 10:49 | ||
dobrolub, не выходит. Метод
возвращает null. Я работаю в Eclipse и эту папку подключаю как "Class folder" (Java Build Path -> Add Class folder), т. е. как папку, содержащую классы. Может быть это неверно? |
Автор: dobrolub 17.1.2010, 21:46 |
Возможно eclipse немного углубился в директории при добавлении и добавил вместо корня первую папку под корнем. Например если у тебя пакет x/y/z находящийся в папке /tmp то надо убедится, что именно папка /tmp добавлена, а не папка /tmp/x Посмотри на тест- проект в прикреплённом test.jar |
Автор: LSD 18.1.2010, 18:07 | ||
Потому, что он возвращает именно Resource, а не папку или еще какую подобную фигню. В принципе самый нормальный способ это создать файл со списком иконок (имя его разумеется фиксировано). Читать этот файл и уже тогда грузить иконки. Все остальное извраты с ClassLoader очень ненадежны. Если например твое приложение будет использоваться в апплете и ClassLoader будет сетевой, но никакого listFiles() там может и не быть. |