Ответ 1
API IO Java опирается на локальную файловую систему на диске, а не на путь класса. Кроме того, использование относительных путей в Java IO - это рецепт проблемы переносимости, не полагайтесь на него. Чтобы выделить ресурсы в пути к классам, вы обычно используете ClassLoader#getResource()
или ClassLoader#getResourceAsStream()
.
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("src/main/resources/ids.txt");
Тем не менее, вам не нужна эта строка DataInputStream
. Вы на самом деле не пользуетесь им.
Обновить: если это не работает, то либо имя ресурса просто неверно, либо файл на самом деле не существует в пути к классам, где вы ожидаете его. Мои центы в том, что папка src
на самом деле является root пути к классам, а не частью пакета. Удалите его из имени.
Обновить 2: чтобы получить все пути к файловой системе корневого диска, которые покрываются оболочкой классов выполнения, выполните следующие действия:
for (URL root : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) {
System.out.println(root);
}
Имя ресурса должно быть относительно любого из них. То, что оно было помещено в /WEB-INF/classes
во время сборки, является нормальным. Он покрывается классом. Ваша проблема лежит где-то в другом месте. Вы уверены, что имя ресурса верное? Вы уверены, что используете код, который, по вашему мнению, работает?