2

クラスパスにある可能性のあるファイルを読み取るための最良の方法を知りたかっただけです。

私が持っているのは、ファイルのパスを持つプロパティだけです。例えば:

  • filepath = classpath:com / mycompany / myfile.txt
  • filepath = file:/myfolder/myfile.txt

そのプロパティからInputStreamをロードするための最良の方法はどれですか?

4

4 に答える 4

3

URLメソッドopenStreamを使用できます。このメソッドは、ファイルの読み取りに使用できるInputStreamを返します。URLは、JARの内外のファイルで機能します。有効なURLを使用するように注意してください。

于 2012-09-13T15:17:57.080 に答える
3

手動で検出する必要があります。そうしたら、入力ストリームの形式でクラスパスからリソースを取得するには、次のようにします。

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のルートなど)を基準にしています。

当然、出力ストリームを取得する方法はありません。原則として、クラスパスのほとんどのエントリは書き込み可能ではありません。

于 2020-11-10T13:13:07.293 に答える
1

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内からリソースを抽出するには、ここを参照してください。

于 2012-09-13T15:16:46.180 に答える
0

スプリングを使用する場合org.springframework.core.io.DefaultResourceLoaderの解決策は次のとおりです。

@Resource DefaultResourceLoader defaultResourceLoader;
defaultResourceLoader.getResource(path).getInputStream()
于 2020-11-10T14:53:10.740 に答える