2017-02-01 3 views
1

У нас есть приложение для загрузки весны, в котором есть утилита jar api, которую мы используем, для загрузки свойств с помощью InputFileStream. Мы упаковали унаследованную банку в нашу весеннюю загрузочную кувшин, а файлы свойств находятся в папке BOOT-INF/classes. Я мог видеть, что весна загружает все соответствующие свойства, но когда я передаю имя файла свойств в устаревшую банку, он не мог прочитать файл свойств как свой внутри банки и не находится под физическим путем. В этом случае, как мы передаем файл свойств в устаревшую банку?Чтение файла внутри весеннего загрузочного ящика

Обратите внимание, что мы не можем изменить устаревшую банку.

+0

Что делает API в наследство банку позволит вам пройти в него? Можете ли вы передать InputStream или использовать только строку, которую он интерпретирует как путь к файловой системе? –

+0

Да, унаследованная банка только позволяет мне передать строку, которая является файловым путем. – lsiva

ответ

0

В принципе, вы не можете, поскольку свойства «файл» не являются файлом, это ресурс в файле jar, который сжимается (на самом деле это .zip-файл).

AFAIK, единственный способ сделать эту работу - извлечь файл из банки и поместить его на свой сервер в известном месте. Затем во время выполнения откройте этот файл с помощью FileInputStream и передайте его устаревшему методу.

+0

Мы хотели развернуть приложение как одну живую банку и запустить ее как автономную. есть ли способ достичь этого? – lsiva

+0

Единственное решение, о котором я могу думать, это получить файл во время выполнения, как InputStream, через getResourceAsStream, записать его в файл (в виде временного файла?), А затем открыть его с помощью FileInputStream – GreyBeardedGeek

+0

Позвольте мне попробовать этот подход , – lsiva

1

Фактически вы можете, используя FileSystem. Вам просто нужно эмулировать файловую систему в папке, в которой вы хотите получить файл. Например, если вы хотите получить file.properties, который находится под src/main/resources вы могли бы сделать что-то вроде этого:

FileSystem fs = FileSystems.newFileSystem(this.getClass().getResource("").toURI(), Collections.emptyMap()); 
String pathToMyFile = fs.getPath("file.properties").toString(); 
yourLegacyClassThatNeedsAndAbsoluteFilePath.execute(pathToMyFile) 
Смежные вопросы