Мне нужно использовать/определить тип переменной java.io.File, чтобы получить файл, который будет отправлен в качестве параметра другому методу.
Теперь у меня есть относительный путь:
File file = new File("C:/javaproject/src/main/resources/demo/test.txt");
Я хочу изменить его с помощью ClassLoader следующим образом:
ClassLoader.getSystemResource("/demo/test.txt");
Но я не могу использовать его в файле, потому что это не тот же тип. Если я использую .toString(), он возвращает NullPointerException:
java.lang.NullPointerException: null
И когда я печатаю его с выходом System, возвращаю то же самое, исключение: System.out.println(ClassLoader.getSystemResource("demo/test.txt").toString());
И папка, и файл существуют. Почему эта ошибка?
Та же ошибка @spi
URL url = getClass().getResource("/demo/test.txt")из документация он возвращает объект URL для чтения ресурса или null, если ресурс не может быть найден. Таким образом, вы вводите неправильное «имя», поэтому оно возвращает значение null, вызывая исключение NullPointerException, когда вы пытаетесь выполнить null.toString().
Подсказка: C:/javaproject/src/main/resources/demo/test.txt — это относительный путь нет.




Ты можешь это сделать:
try {
URL resource = getClass().getClassLoader().getResource("demo/test.txt");
if (nonNull(resource)) {
File file = new File(resource.toURI());
// do something
}
} catch (URISyntaxException e) {
LOGGER.error("Error while reading file", e);
}
Этот отвечать показывает разницу между ClassLoader.getSystemResource и getClassLoader().getResource()
попробуйте
ClassLoader.getSystemResource("/demo/test.txt")(с косой чертой в начале)