Java — java.io.File с путем к классам

Мне нужно использовать/определить тип переменной 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());

И папка, и файл существуют. Почему эта ошибка?

попробуйте ClassLoader.getSystemResource("/demo/test.txt") (с косой чертой в начале)

spi 19.02.2019 13:30

Та же ошибка @spi

gtx911 19.02.2019 13:31
URL url = getClass().getResource("/demo/test.txt")
spi 19.02.2019 13:32

из документация он возвращает объект URL для чтения ресурса или null, если ресурс не может быть найден. Таким образом, вы вводите неправильное «имя», поэтому оно возвращает значение null, вызывая исключение NullPointerException, когда вы пытаетесь выполнить null.toString().

Federico Ciuffardi 19.02.2019 13:32

Подсказка: C:/javaproject/src/main/resources/demo/test.txt — это относительный путь нет.

bkis 19.02.2019 13:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
3 422
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты можешь это сделать:

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()

Другие вопросы по теме