Вручную получить содержимое файла в Spring boot 2 - PullRequest
0 голосов
/ 31 мая 2019

У меня есть файл в каталоге src / main / resources / static / css /, называемый my.css, который я пытаюсь загрузить как строку, но я не могу на протяжении всей жизни заставить Spring найти этот файл, которыйпредположительно статически загружен уже в classpath.

    private String getCss(String cssFileName) {
        try {
            File file = new ClassPathResource("classpath:" + cssFileName + ".css").getFile();
            return new String(Files.readAllBytes(Paths.get(file.getPath())));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "css not found";
    }
}

Я пробовал различные веб-конфигурации, загрузчики ресурсов, пути и шаблоны, но я просто не могу заставить это работать.Как мне найти файл в моих ресурсах?Я ожидал бы что-то типа Resources.getResource("name.type"), у которого уже есть дерево со всеми ресурсами из папки ресурсов в нем.

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Я помню, что застрял с той же проблемой, когда мне нужно было загрузить этот файл xml / json.Вот как я это решил -

String sorting;
this.sorting = org.apache.commons.io.IOUtils.toString((getClass().getClassLoader().getResource("order.json")),
                    StandardCharsets.UTF_8.name());
0 голосов
/ 31 мая 2019

Использование комментария @ pandaadb и функции автоматического подключения Spring для получения экземпляра класса ResourceLoader:

@Controller
public class Controller {

    @Autowired private ResourceLoader loader;

    private String getCss(String cssFileName) {
        try {
            File file = loader.getResource("classpath:/static/css/" + cssFileName + ".css").getFile();
            return new String(Files.readAllBytes(Paths.get(file.getPath())));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "css not found";
    }
}

ResourceLoader использует вашу папку src / main / resources в качестве корня поиска "classpath:", так что простое добавление всего пути с этого момента работает. Не связывайтесь напрямую с classpathloader, он автоматически каким-то образом преобразуется в основанный на указанном префиксе. Этот код теперь находит файл, читает его и преобразует в строку.

...