API Java IO использует файловую систему локального диска, а не путь к классам. Кроме того, использование относительных путей в 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
во время сборки, это нормально. Это покрыто classpath. Ваша проблема лежит где-то еще. Вы уверены, что имя ресурса правильное? Вы уверены, что запускаете код, который, как вы думаете, вы запускаете?