Как создать InputStream через ClassPath?
Задача - считать файл WordsEx7.txt, который находится в той же папке, что и класс Ex8. Инициализировать Scanner, так, чтобы мы брали файл из classpath. Пробовал варианты от сюда https://stackoverflow.com/questions/20389255/reading-a-resource-file-from-within-jar https://stackoverflow.com/questions/1464291/how-to-really-read-text-file-from-classpath-in-java
Результат один: in = null и NullPointerException. Пробовал изменять положение файла и передавать как аргумент ("/wordsEx7.txt). Тоже не помогло.
public class Ex8 {
public static void main(String... args) throws IOException {
Map<String,Set<Integer>> words = new HashMap<>();
InputStream in = Ex8.class.getClassLoader().getResourceAsStream("wordsEx7.txt");
try(Scanner scanner = new Scanner(new InputStreamReader(in))) {
...
}
...
}
}
...
}
}
Ответы (2 шт):
Вопрос обсуждался здесь: https://ru.stackoverflow.com/questions/549386/Где-должен-находится-файл-для-getclassloader-getresourceasstream/549400
Все что вам нужно - перед именем файла поместить имя папки в которой находится класс Ex8. Т.е. если это папка "ex8", то:
InputStream in = Ex8.class.getClassLoader().getResourceAsStream("ex8/wordsEx7.txt");
если вызов идет из папки предыдущего уровня.
Решение сверху действительно сработает в том случае, если вы не используете Maven или Gradle. Если используете, например, Maven, то файл следует поместить по пути src/main/resources