Я создал действительно простой проект для тестирования чтения каталога или файла с помощью getClass().getResource('...').getPath()
от STS, Tomcat и запуска файла JAR/WAR с терминала со встроенным Tomcat.Spring Resource Inside JAR/WAR
Как я уже сказал, проект просто, вот код:
package org.example
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
class ResourceDemoApplication implements CommandLineRunner {
static void main(String[] args) {
SpringApplication.run ResourceDemoApplication, args
}
@Override
void run(String... arg0) throws Exception {
retrieveDirectory()
}
void retrieveDirectory() {
/*new File(getClass().getResource('/private/folders').getPath()).eachDirRecurse() { dir ->
dir.eachFileMatch(~/.*.txt/) { file ->
println(file.getPath())
}
}*/
println new File(getClass().getResource('/private/folders/').getPath()).isDirectory()
}
}
Если этот код работает в STS или если уронить его в запущенный экземпляр Tomcat, он печатает true
. Когда я запускаю его как java -jar...
, он возвращает false
в терминал. Я посмотрел на бесчисленные примеры, и я до сих пор не понимаю, как заставить это работать должным образом или как ожидалось. Я знаю, что чтение файлов из JAR отличается от доступа к файловой системе, но я не уверен, как заставить это работать независимо от того, как он развернут.
Заранее благодарю за помощь!
Как уже упоминалось баночка не файл, и вы не можете прочитать его как таковой. Он работает в контейнере, потому что война распаковывается, а затем снова является файловым ресурсом. –
Так не возможно ли прочитать файл/каталог из банки? –
Конечно, вы можете, но не как файл, использовать 'InputStream', который будет работать независимо от того, как/где хранится файл. –