2012-01-07 13 views
2

私はproducts.jarファイルを持っています。その中には一つのクラスcom.ClassAがあります。プロジェクトの構造は、Javaのビルド・パスにあるClassA.javaは、次のパスでinputs.txtファイルにアクセスしているし、それがうまくJava - クラスパスの問題

private static final String PROPERTIES_FILE_PATH = "test/dependencies/inputs.txt"; 

testパッケージを働いている、日食インサイド

products 
    |--test 
     |--com 
      |--ClassA.java 
     |--dependencies 
      |---inputs.txt 

のようなものです - >ソース

しかし、このプロジェクトをproducts.jarとしてエクスポートすると、jarファイルにはtestというディレクトリが存在しません。 jarファイルのルートには、comdependenciesの2つのディレクトリがあります。だから私は、コマンドラインから(jarファイルに存在する)ClassAを実行しようとしていたとき、私は次の例外を取得しています:

JUnit version 4.8.2 
java.io.FileNotFoundException: test/dependencies/inputs.txt (No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:137) 
at java.io.FileInputStream.<init>(FileInputStream.java:96) 

だからtest dirはjarファイルにエクスポートされていないことを発見した後、私は変更私のClassA.javaのファイルのパスはdependencies/inputs.txtになります。それは日食では動作しませんでしたが、jarファイルがクラスパスにあり、dependenciesフォルダがjarファイルのルートにあるので、Javaランチャがdependenciesフォルダを見つけてinputs.txtというファイルを見つけることができるので、

しかし残念ながら、それも動作していません。

答えて

6

FileInputStreamを使用して、JAR内にパッケージ化されたファイルを読み取ることはできません。これはファイルではありません。 FileInputStreamは、実際のディスクファイルに対してのみ動作します。

Class.getResourceAsStreamjavadoc)を使用してリソースを読み取る必要があります。

InputStream stream = getClass().getResourceAsStream("/dependencies/inputs.txt"); 

testという接頭辞は、JARファイル構造に含まれていないため、そのまま残しておきます。

2

FileInputStream()は、ファイルシステム上のファイルのみをあなたのjarファイル内で読み取ることはありません。使用.getClass()。getResourceAsStream(ResourceNameの)または.getClass()。のgetClassLoader()。getResourceAsStream(ResourceNameの)class getResourceAsStreamclassloader getResourceAsStream()

のjavadocに

詳細情報

関連する問題