2012-02-15 20 views
2

jarからアプリケーションを実行するとnew File(path)が機能しないのはなぜですか?これをどのように変更する必要がありますか?今私はFileNotFound私のアプリケーションがファイルを読み込もうとしたときに例外を受け取っています。jarからアプリケーションを実行すると、新しいファイル(パス)が機能しないのはなぜですか?

final File file = new File("src/main/resources/maps/ParcelsCountyRDMFinal5.shp"); 
+0

どのようにパスを提供していますか?相対的ですか? –

+0

Eclipseからうまく動作しますが、cmdでjava-jarを実行すると例外が発生します。 – ilija

+0

私はmainメソッドでそのファイルを作成しています。私はmaven shade pluginを使用しました。私の瓶を解凍すると、マップフォルダは、ファイルを作成するクラスを含むパッケージのフォルダの隣にあります。私は新しいFile(object.getClass()。getResources( "maps/ParcelsCountyRDMFinal5.shp")。getPath())を試しました。 – ilija

答えて

2

は、Mavenの、リソースファイルを使用して言うクラスファイルの隣になります。

final File file = new File("../../maps/ParcelsCountyRDMFinal5.shp"); 

や提案

final File file = new File(getClass().getResource("/maps/ParcelsCountyRDMFinal5.shp")); 
1

それはクラスパスにすでに存在する場合は、このようにそれを得ることができます。jarが適切に作成された場合

File file = new File(getClass().getResource("Relative_Path_From_This_Class_To_YourFileName").getPath()); 
1

日食を実行しているとして:あなたはこのような構造のため、このように、ディレクトリおよびアクセスfileToReadにまで歩くことができるのいずれか

myapp.jar 
| 
+--- com 
|  +---mycompany 
|   +-- FileOpsClass 
| 
+--- maps 
     +-- fileToRead 

:それは次のようになります現在の作業ディレクトリがプロジェクトディレクトリに設定されます。したがって、相対パスが機能します。ファイルもjarファイルに圧縮されているので、ファイルの代わりにInputStreamを使うのがよい。

InputStream in = this.getClass().getResourceAsStream("/resources/maps/ParcelsCountyRDMFinal5.shp"); 
関連する問題