У меня есть программа Swing Java, которая читает *.txt файлы в папке ресурсов с именем res, содержащей вложенные папки разного типа JSON. Когда я запускаю прямо из Eclipse, все в порядке. Если я создаю исполняемую банку, это не сработает. Мне удалось заставить его работать с ужасающим решением, помещая все мои текстовые файлы в пакет, где они вызываются.
Чтобы прочитать их, я использую эту строку кода:
InputStream is = this.getClass().getResourceAsStream(file + ".txt");
где file - строка. Я думал, что это будет искать в банке указанный файл, но, очевидно, нет. Я попытался поместить путь к файлам, res/subfolder/name_of_file.txt и вложенной папке /name _of_file.txt, но безрезультатно. Вот структура моего проекта
Project
src
com.package
res
JSON_type1
JSON_type2
file.txt
Из com.package у меня есть класс, который должен читать из JSON_type2/file.txt. Помимо очевидной причины сохранения моего текстового файла во вложенных папках, мой графический интерфейс заполняет выпадающий список содержимым этих подпапок.
Из того, что я собрал из других вопросов здесь, getResourceAsStream() было бы моим решением, если бы я хотел сохранить текстовые файлы в пакете, где они вызываются. Помимо этого я нашел что-то о подклассе ClassLoader и перезаписав findResource(). Если возможно, я хочу избежать этого решения, поскольку я далеко не знаком с этим классом и его функциональными возможностями.
Если вам нужна дополнительная информация, дайте мне знать.
Спасибо
P.S.: Этот вопрос возник из моего предыдущего вопроса здесь
// added leading / to indicate search from root of class-path
String file = "/res/JSON_type2/file.txt";
InputStream is = this.getClass().getResourceAsStream(file);
Вы можете обращаться к файлам в пакетах, деля их на косые черты, например, для file.txt вы должны getResourceAsStream("/res/JSON_type2/file.txt")
Слэши не относятся к структуре папок, а не зависят от платформы, они просто способ, которым загрузчик классов обращается к файлам.
В Eclipse я смог получить в основном функциональность, которую вы ищете:
src (folder)
main (package)
...Classes...
other (folder)
res (package)
...txt files...
Кажется, что Eclipse полностью игнорирует папки и заботится только о пакетах. Пока я помещаю свои текстовые файлы в пакет a, я могу захватить InputStream с помощью getResourceAsStream ( "/res/somefile.txt" ).
this.getClass().getResourceAsStream("file.txt");
оно работает. Любая идея, где я мог бы искать другую ошибку?