2013-06-27 19 views
42

標準的なMavenセットアップを想定しています。プロジェクト内の/ resourcesフォルダのファイルへの絶対パスを取得する方法

あなたのリソースフォルダにファイルabcと言ってください。

Javaでは、どうすればファイルへの絶対パスを取得できますか?

+0

Mavenプラグインを作成しますか?または、プログラムの実行時にファイルにアクセスしたいですか? –

+0

関連:http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

答えて

14

あなたはFileオブジェクトを作成し、getAbsolutePath方法を使用することができます:クラスパス内のファイルが物理的にここでそれは今重要ではありません

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

:実際に動作する適切な方法を

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

限定された使用の助言は、作業ディレクトリに依存するためです。ルート。そして、それでも、ファイルを参照するには 'target/classes/abc.txt'を使うべきです。これは、Mavenが処理後にリソースファイルを置く標準的な場所です(例えば、maven-resourcesプラグインがabc.txt)。クラスパスからgetResource()を介してabc.txtを使用するほうがはるかに優れています。 –

+1

エンドユーザがアプリケーションを実行可能なJARとして実行している場合はどうなりますか?その後、物理ファイルはまったくありません。これはgetResource()を使用するもう1つの理由です。あなたが何をしたいのかに応じて入力ストリームを開きます。 –

+4

これを正解として削除できますか? @ Karol Sは以下のように答えました - それは正解でなければなりません(したがってアップヴォートの不一致) – DanGordon

104

をリソースが実際にはJARエントリではなくファイルである限り、それは見つかるでしょう。

は(一見明白なnew File(resource.getPath())は、すべてのパスでは動作しません!パスがURLエンコードされている!)

+3

おそらくあなたができることは次のとおりです: 'new File(resource.toURI())。getAbsolutePath();'(つまり、Pathオブジェクトが必要ではないと思います) –

+1

toURI()、これは%20のように出てくるあなたのパスのスペースを避けます! –

+17

ありがとう!これはほとんど私のために働いた。しかし、私は1つの変更を加えなければなりませんでした:YourClass.class.getClassLoader()。getResource( "abc"); – yngwietiger

11

あなたがパスをspecifieしなければならない/

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

から始まったのClassLoaderインスタンスを作成します。あなたが必要とするクラスであれば、ファイルやリソースに簡単にアクセスできます。 このクラスのgetPath()メソッドを使用してパスにアクセスしました。

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path); 
関連する問題