クラスパスにある可能性のあるファイルを読み取るための最良の方法を知りたかっただけです。
私が持っているのは、ファイルのパスを持つプロパティだけです。例えば:
- filepath = classpath:com / mycompany / myfile.txt
- filepath = file:/myfolder/myfile.txt
そのプロパティからInputStreamをロードするための最良の方法はどれですか?
URLメソッドopenStreamを使用できます。このメソッドは、ファイルの読み取りに使用できるInputStreamを返します。URLは、JARの内外のファイルで機能します。有効なURLを使用するように注意してください。
手動で検出する必要があります。そうしたら、入力ストリームの形式でクラスパスからリソースを取得するには、次のようにします。
class Example {
void foo() {
try (InputStream in = Example.class.getResourceAsStream("/config.cfg")) {
// use here. It'll be null if not found.
}
}
}
注意:先頭にスラッシュがない場合は、ファイルが含まれているのと同じディレクトリ(必要に応じてjar内)を基準にしていExample.class
ます。先頭のスラッシュは、クラスパスのルート(jarのルート、'bin' dirのルートなど)を基準にしています。
当然、出力ストリームを取得する方法はありません。原則として、クラスパスのほとんどのエントリは書き込み可能ではありません。
String
メソッドを使用して、クラスパスまたはファイルパスstartsWith(String sequence)
で始まるかどうかを確認し、そこから適切なメソッドを呼び出して作業を行います。
String str=//extracted property tag
if(str.startsWith("filepath")) {
//simply intialize as URL and get inputstream from that
URL url =new URL(str);
URLConnection uc = url.openConnection();
InputStream is=uc.getInputStream();
} else if(str.startsWith("classpath")) {
//strip the classpath and then call method to extract from jar
}
jar内からリソースを抽出するには、ここを参照してください。
スプリングを使用する場合org.springframework.core.io.DefaultResourceLoader
の解決策は次のとおりです。
@Resource DefaultResourceLoader defaultResourceLoader;
defaultResourceLoader.getResource(path).getInputStream()