Невозможно читать файлы ресурсов из src / test / resources в STS

Я создал папку в корневом каталоге проекта, и внутри я добавил файл в папку jsons как jsons/server_request.json.

Теперь я пытаюсь прочитать этот файл, вызывая статическую функцию в CommonTestUtilityclass, заданную как:

      public class CommonTestUtility {
    
    public static String getFileAsString(String fileName) throws IOException {
        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
        File file = new File(classLoader.getResource(fileName).getFile());
        String content = new String(Files.readAllBytes(file.toPath()));
        return content;
    }
}

Теперь при вызове этой функции как

      class ServerTest {
@Test
void test_loadResource() {
    String content = CommonTestUtility.getFileAsString("jsons/server_request.json");
}

}

, Это дает мне ошибку:

      CommonTestUtility - Cannot invoke "java.net.URL.getFile()" because the return value of "java.lang.ClassLoader.getResource(String)" is null.

Я попытался включить src/test/resources/ в конфигурации запуска Junit ServerTest.java, но по-прежнему не может найти ресурс. Как решить эту проблему?

2 ответа

https://mkyong.com/java/java-read-a-file-from-resources-folder/

Эта ссылка выше может быть полезна. Метод getResource () возвращает URI, на который нужно изменить функцию .getFile(). toURI(). Простой код

частный файл getFileFromResource(String fileName) выдает исключение URISyntaxException{

          ClassLoader classLoader = getClass().getClassLoader();
    URL resource = classLoader.getResource(fileName);
    if (resource == null) {
        throw new IllegalArgumentException("file not found! " + fileName);
    } else {

        // failed if files have whitespaces or special characters
        //return new File(resource.getFile());

        return new File(resource.toURI());
    }

}

Я воссоздал тот же сценарий, который вы описываете, и ваш код работает на меня. Не могли бы вы перепроверить, что ваш проект похож на мой ниже? Если так, я подозреваю, что это может быть связано с вашей средой.

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