Spring не находит файл в ресурсах - PullRequest
1 голос
/ 01 апреля 2019

У меня есть следующая строка

File file = ResourceUtils.getFile("classpath:calculation.csv");

, и я также попытался

File file = ResourceUtils.getFile("classpath:/calculation.csv");

, но оба приведут к ошибке

java.io.FileNotFoundException: class path resource [calculation.csv] cannot be resolved to absolute file path because it does not exist

, но у меня есть расчет.CSV в папке ресурсов .. почему это?

Мне нужно прочитать файл из папки ресурсов, и он также должен работать в среде сервера

РЕДАКТИРОВАТЬ:

ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("calculation.csv").getFile());

работает так же хорошо, так что совсем нет ..

EDIT2: попробовал с папкой .. У меня есть и calc.csv и csv / accounting.csv в моей папке ресурсов сейчас ..

ничего из вышеперечисленного не работает, с / csv / добавлено.

какой путь хочет эта вещь?!

EDIT3:

aaand

File file = new ClassPathResource("calculation.csv").getFile();

тоже не идет, что даже это..

1 Ответ

1 голос
/ 01 апреля 2019

Загрузка файла (как ФАЙЛА) не будет работать. Вы должны использовать его как ресурс. Файлы внутри JAR все равно не будут работать как файлы. Это также то, что показывает ваш код проверки.

classLoader.getResource("calculation.csv") работает, потому что вы используете загрузчик классов для получения ресурса, а не файловую систему для получения файла (что и делает File api). Это может сработать, если вы будете иметь дело с неупакованным приложением. После того, как вы упакуете свое приложение в JAR, путь к файлу будет выглядеть как your/path/to/jar.jar!someResource - примечание ! (и это вы также увидите). Так что в основном он вернет File экземпляр, который вы не сможете использовать в любом случае, так как файловая система не имеет к нему доступа.

Вы также можете сначала попытаться извлечь его с помощью ResourceUtiuls#extractJarFileURL(URL jarUrl), а затем использовать извлеченный файл.

Я думаю, что в большинстве случаев Class#getResourceAsStream - это путь, и я думаю, что он также должен соответствовать вашим потребностям, чтобы читать содержимое ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...