標準の Maven セットアップを想定します。
resources フォルダに file があるとしますabc
。
Javaでは、ファイルへの絶対パスを取得するにはどうすればよいですか?
メソッドを使用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();
必要なクラスの classLoader インスタンスを作成すると、ファイルやリソースに簡単にアクセスできます。getPath()
そのクラスのメソッドを 使用してパスにアクセスします。
ClassLoader classLoader = getClass().getClassLoader();
String path = classLoader.getResource("chromedriver.exe").getPath();
System.out.println(path);
絶対パスにたどり着くまでに 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/resource
here に挿入する必要があります。
コードを自分のものに挿入して、持っているパスを確認できます。