Чтение файла от банки, или где-нибудь на пути к классу?

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

Структура:

src/main/java
src/main/resources/file.txt

Текущий метод чтения:

getClass().getResourceAsStream("/file.txt")

Там читает метод, который возьмет src/main/resources /*, а также корневой уровень JAR (где ресурсы развертываются)?

5
задан Stefan Kendall 18 March 2010 в 03:17
поделиться

2 ответа

Я не понимаю вашей проблемы. Ресурсы из src / main / resources автоматически копируются в target / classes и, таким образом, доступны в пути к классам в Maven и Eclipse относительно корневого уровня в том же месте (если только ваш Проект Eclipse настроен неправильно).

При упаковке внутри JAR содержимое target / classes упаковывается «как есть», поэтому ничего не меняется.

Другими словами, доступ к вашему file.txt совершенно нормально (и на самом деле это , как все документировано ):

// Retrieve resource
InputStream is = getClass().getResourceAsStream( "/file.txt" );

// Do something with the resource

...

Если у вас где-то проблема, просьба уточнить.

Обновление: Я провел быстрый тест с maven-eclipse-plugin, и я не могу воспроизвести вашу проблему:

$ mvn archetype:generate -DgroupId=com.stackoverflow -DartifactId=q2467362 -Dversion=1.0-SNAPSHOT
...
$ cd q2467362
$ mkdir -p src/main/resources
$ mvn eclipse:eclipse
...
$ cat .classpath
<classpath>
  <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
  <classpathentry kind="output" path="target/classes"/>
  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

Каталог src / main / resources добавлен как исходная папка как и ожидалось. Можете ли вы показать свой POM (особенно элемент resources , если вы его определите)?

8
ответ дан 14 December 2019 в 04:35
поделиться

Все, что помещается в src / main / resources с использованием maven2, будет помещено на корневой уровень jar. Таким образом, метод, который вы сейчас используете, будет удовлетворять обоим условиям. Со страницы Maven: http://maven.apache.org/guides/getting-started/index.html# How_do_I_add_resources_to_my_JAR

0
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: