Путь к файлу для чтения файла в коде библиотеки

#java #eclipse #file-io #lwjgl #bufferedreader

#java #eclipse #file-io #lwjgl #bufferedreader

Вопрос:

Мне нужно прочитать исходный файл glsl в мою программу.

Я пишу библиотеку, и мой тестовый код находится в отдельном проекте в Eclipse.

В пути сборки для тестового проекта я установил «Требуемые проекты в пути сборки», чтобы включить библиотеку, которую я пишу.

Проблема в том, что когда я запускаю свой тестовый проект, он ищет «src /example /VertexShader.glsl». Java пытается прочитать это из папки src в тестовом проекте, а не из проекта библиотеки.

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

Я использую следующий код для создания средства чтения для чтения в тексте:

 BufferedReader reader = new BufferedReader(new FileReader(file));
  

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

Комментарии:

1. «и мой тестовый код в отдельном проекте в Eclipse» — я бы ожидал, что ваш код и модульные тесты будут находиться в одном проекте, code under src/main/java и unit tests under src/test/java . Почему они находятся в разных проектах?

2. Поскольку идея заключается в том, что я буду упаковывать библиотеку по отдельности, поэтому я пишу отдельный проект, чтобы как бы эмулировать этот вариант использования

3. Кроме того, это не решило бы мою проблему, потому что, когда библиотека будет завершена и упакована как jar, отдельный проект все равно будет ссылаться на нее, поэтому эта проблема просто возникнет снова

4. Используете ли вы Maven или аналогичный?

5. Я не использую ничего подобного. Я просто использую Java и Eclipse. У меня есть банки LWJGL и SlickUtil, настроенные в конфигурации сборки проекта. Я собираюсь создать окончательный файл библиотеки, используя встроенные функции экспорта Eclipse

Ответ №1:

Eclipse рассматривает мой библиотечный проект как проект, который уже упакован в Jar с точки зрения тестового проекта. Итак, чтобы загрузить ресурсы изнутри проекта, который с точки зрения тестового проекта выглядит как внутри файла Jar, мне нужно использовать getResourceAsStream вместо BufferedReader, который использует объект File, поскольку мой исходный файл glsl больше не будет «файлом». Чтобы исправить это, я должен изменить предыдущий код BufferedReader на:

 InputStream in = Class.class.getResourceAsStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
  

Это устраняет проблему и позволяет мне загружать ресурсы изнутри проекта библиотеки.