Доступ к PDF-файлу из другого проекта

1

У меня есть два проекта в eclipse foo и bar. bar включен как часть foo используя конфигурацию пути сборки в eclipse. Это позволяет мне получить доступ ко всем файлам Java, которые мне нужны из bar внутри foo.

Тем не менее, у меня также есть некоторые документы справки PDF, которые содержатся внутри bar. Эти файлы содержатся в каталоге help/. Когда я пытаюсь получить доступ к таким файлам, help/file.pdf, он работает в bar, но не foo.

Как я могу получить доступ к этим файлам PDF в foo?

Вопрос &

Как файлы доступны? Доступ к файлам осуществляется путем поиска пути к классу ресурса. (т.е. getClassLoader().getResource(path))

  • 0
    Попробуйте поместить help в путь сборки в качестве исходной папки. Проблема в том, что eclipse может связать папку, но JVM не знает об этой связи.
  • 0
    Как вы получаете доступ к файлам? Вы получаете к ним доступ через файловую систему? Если да, то какой точный путь?
Показать ещё 3 комментария
Теги:

3 ответа

1
Лучший ответ

Используя параметр "Путь сборки" в среде Eclipse IDE, вы устанавливаете IDE для добавления пути к расположению файлов классов "bar" в пути класса JVM, то есть "bin". И вы можете получить любой ресурс через эти пути.

Для получения ресурса вам понадобится класс, потому что JVM возвращает ресурсы, беря этот класс в качестве ссылки.

Пусть Anchor будет классом в пакете help bar проекта.
Вот код в классе в проекте foo.

URL url = bar.Anchor.class.getResource("file.pdf");
System.out.println(url);

Вы не можете получить ресурс напрямую (не принимая класс в качестве ссылки).
Это связано с тем, что JVM в основном ведет учет только файлов.class, которые находятся на своем пути.

Но если вы все еще хотите получить файл без использования какого-либо файла.class в качестве ссылки, то это можно сделать, просто используя класс File (location_of_file). Это простой метод, и я знаю, что вы этого не хотите.

Если вы хотите получить файл только по пути, который вы установили с помощью "Путь сборки", вам нужно будет проверить этот файл в пути к классам JVM.
Чтобы получить путь к классу, вам нужно будет вызвать метод System.getProperty() и получить свойство "java.class.path". Затем проверьте все пути, присутствующие в пути к классам.

File file = new File("help","file.pdf");   //'file.pdf' file in 'help' folder 
String classpath = System.getProperty("java.class.path");
StringTokenizer tokenizer = new StringTokenizer(classpath,";");
while(tokenizer.hasMoreTokens()){
    File temp = new File(tokenizer.nextToken(), file);
    if(temp.exists()){
        // here you get your file as 'temp'.
        // If you want it to be in URL form, you can convert it.
        break;
    }
}


Вот структура каталогов, используемая в примере:
| - bar
| | - bin....//созданный IDE (его местоположение задано в пути класса,
| | | --.....//и классы и ресурсы добавляются IDE)
| |
| | - src
| | - help
| | - Anchor.java
| | - file.pdf
|
| - foo
| - src
| - Accessor.java

  • 0
    Каковы точные настройки пути сборки? Если вы посмотрите на мой вопрос, у меня есть ваш код.
  • 0
    В вашем случае конфигурация пути сборки должна быть установлена путем добавления проекта панели на вкладке Project в Java Build Path Option.
Показать ещё 5 комментариев
0

Чтобы достичь этого, help должна быть исходной папкой панели проекта. Таким образом, все содержимое help будет скопировано, чтобы ограничить местоположение вывода и, таким образом, доступным для foo.

0

Если вы включили bar как часть foo используя конфигурацию ванны для сборки в Eclipse, bar находится в пути сборки, когда компиляция foo.

Корреспондент построил артефакт для bar (например, файл jar), также должен находиться в пути к классам во время выполнения. Для этого вам необходимо настроить развертывание; делать это в Eclipse отличается от проектов разных типов. Какой проект является foo?

Теперь, если у вас есть проект в пути к классам (сборка или время выполнения), вы можете найти ресурсы в нем, используя загрузчик классов.

Предполагая, что вы добавили справочную папку в качестве исходной папки в bar и у вас есть класс com.mycompany.MyClass в foo, вы можете получить URL своего ресурса в foo используя следующее:

java.net.URL pdfUrl = com.mycompany.MyClass.class.getResource("/help/file.pdf");

Затем с помощью этого URL-адреса вы можете открыть поток для чтения своего ресурса:

java.io.InputStream is = url.openStream();
  • 0
    Кажется, не работает. Файл не найден в пути к классам.
  • 0
    Какая часть этого кода не работает для вас? Если вы запустите его в отладчике, вы можете увидеть pdfUrl со значением? А как насчет потока ввода?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню