119

標準の Maven セットアップを想定します。

resources フォルダに file があるとしますabc

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

4

6 に答える 6

101

メソッドを使用ClassLoader.getResourceして正しいリソースを取得できます。

URL res = getClass().getClassLoader().getResource("abc.txt");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();

また

これは常に機能するとは限りませんが、より簡単な解決策 -

Fileオブジェクトを作成してgetAbsolutePathメソッドを使用できます。

File file = new File("resources/abc.txt");
String absolutePath = file.getAbsolutePath();
于 2013-06-27T18:56:42.117 に答える
14

必要なクラスの classLoader インスタンスを作成すると、ファイルやリソースに簡単にアクセスできます。getPath()そのクラスのメソッドを 使用してパスにアクセスします。

 ClassLoader classLoader = getClass().getClassLoader();
 String path  = classLoader.getResource("chromedriver.exe").getPath();
 System.out.println(path);
于 2017-03-31T09:05:29.517 に答える
4

絶対パスにたどり着くまでに 2 つの問題があります。

  1. 見つかった配置は、ソース ファイルがある場所ではなく、クラスが保存されている場所になります。また、リソース フォルダーはほぼ確実に、プロジェクトのソース フォルダーのどこかに存在します。
  2. リソースを取得するための同じ関数は、クラスがワークスペース内のプラグインまたはパッケージで直接実行される場合、動作が異なります。

次のコードは、すべての有用なパスを提供します。

    URL localPackage = this.getClass().getResource("");
    URL urlLoader = YourClassName.class.getProtectionDomain().getCodeSource().getLocation();
    String localDir = localPackage.getPath();
    String loaderDir = urlLoader.getPath();
    System.out.printf("loaderDir = %s\n localDir = %s\n", loaderDir, localDir);

ここでは、リソース フォルダーのローカライズに使用できる両方の機能を調査します。に関してはclass、静的または動的のいずれかの方法で取得できます。


プロジェクトがプラグインに含まれていない場合、コードを JUnit で実行すると、次のように出力されます。

loaderDir = /C:.../ws/source.dir/target/test-classes/
 localDir = /C:.../ws/source.dir/target/test-classes/package/

したがって、src/rest/resources に到達するには、ファイル ツリーを上下に移動する必要があります。どちらの方法も使用できます。getResource(resourceFolderName)そのフォルダーはターゲットフォルダーにないため、使用できないことに注意してください。作成されたフォルダーにリソースを配置する人は誰もいないと思います。


クラスがプラグイン内のパッケージ内にある場合、同じテストの出力は次のようになります。

loaderDir = /C:.../ws/plugin/bin/
 localDir = /C:.../ws/plugin/bin/package/

そのため、ここでもフォルダ ツリーを上下に移動する必要があります。


最も興味深いのは、パッケージがプラグインで起動される場合です。この例では、JUnit プラグイン テストとして。出力は次のとおりです。

loaderDir = /C:.../ws/plugin/
 localDir = /package/

ここでは、両方の関数の結果を組み合わせてのみ絶対パスを取得できます。そして、それだけでは十分ではありません。それらの間に、クラス パッケージがある場所のローカル パスを、プラグイン フォルダーに対して相対的に配置する必要があります。おそらく、何かを assrcまたはsrc/test/resourcehere に挿入する必要があります。

コードを自分のものに挿入して、持っているパスを確認できます。

于 2019-05-27T13:29:17.750 に答える