2017-04-17 16 views
0

は、私は、次のソース構造を持っている:Javaでリソースファイルをロードするには?

src 
    resources 
     config.properties 
     data.txt 

は私が平坦化せずに、私のジャーに、これらのファイルをコピーします。したがって、jarファイルにはresources/config.propertiesresources/data.txt

が含まれています。ローカル(Eclipse:Run Config | Run Configurations)で実行中にconfig.propertiesが正常に動作し、jarを実行しています。

private static final String CONFIGURATION_FILE_PATH = "resources/config.properties"; 
resourceInputStream = classLoader.getResourceAsStream(CONFIGURATION_FILE_PATH); 
configurationProperties.load(resourceInputStream); 

data.txtファイルはローカルで動作しますが(Eclipse:Run Config | Run as Run)、jarの実行時には見つかりません。私はFileオブジェクトを作成して、それを第三者のライブラリに渡す必要があります。

private static final String DATA_FILE_PATH = "resources/data.txt"; 
URL resourceUrl = classLoader.getResource(DATA_FILE_PATH); 
File file = resourceUrl == null ? null : new File(resourceUrl.getPath()); 

jarを実行すると、fileはnullです。

実行問題ですか?

私はJenkins jar /build/myapp.jarからjarファイルを呼び出しています。この実行のクラスパスを設定する必要がありますか?私は-cpスイッチを意味する?他のロード・オプション

オープン上述したように、config.properties負荷細かいです。 getResourceでロードするために私のdata.txtは必要ありません。私は他の方法にもオープンです。私がそれからFileを得ることができる限り。

+0

スラッシュなどで始まります。 "/resources/data.txt" – markspace

+0

私はそれを試みましたが、それはローカル実行に失敗します。これによって瓶が機能するようになっても、私はまだそれを局所的に働かせる必要があります。 – user6651485

+1

「ローカルラン」についての詳細は、私のために必要になります。 – markspace

答えて

0

Javaリソースの場合は、リソース名をスラッシュで開始して絶対パスまたはJar階層の最上位にする必要があります。

スラッシュで始まらないリソース名は、ロードするクラスの現在の場所(パッケージ名/ディレクトリ)に相対的です。

+0

Mark、あなたは 'src/resources'構造体を持っていますか?私は推測しているが、プロジェクトフォルダの下に直接リソースファイルがあるかもしれない。 – user6651485

+0

srcは、NetBeansがデフォルトで使用するJavaの標準ディレクトリ構造の一部です。 srcはパス名/クラスパスには含まれません。バイナリが実際に配置されている場所の1つ上のレベルです。 – markspace

+0

しかし、リソースはフラット化せずにターゲットディレクトリ(コンパイルターゲットと同じ)にコピーされます。私は私の質問でこれを言いました。したがって、srcについて議論する必要はありません。 – user6651485

関連する問題