STS、TomcatのgetClass().getResource('...').getPath()
を使ってディレクトリやファイルを読み込み、埋め込まれたTomcatを使って端末からJAR/WARファイルを実行するという、とても簡単なプロジェクトを作成しました。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の内部からファイルを読むことはファイルシステムにアクセスすることとは異なることを知っていますが、どのように展開されているかに関係なく、これを動作させる方法はわかりません。
ありがとうございました!
すでにjarファイルはファイルではありません、あなたがそのように読むことができません述べたように。それは、戦争が解凍されてから再びファイルリソースになるため、コンテナ内で動作します。 –
jarファイルからファイル/ディレクトリを読み取ることはできませんか? –
もちろん、ファイルとしてはできませんが、ファイルがどこに格納されているかにかかわらず動作する 'InputStream'を使用してください。 –