1

実行可能jarファイルが置かれているディレクトリのパスを取得しようとしています。つまり、私は次の構造を持っています。

 --> Application (this is a folder somewhere in my file system)
     --> application.jar (this is my java application
     --> SomeData (folder in the same directory like the application)
         --> some other folders
         ......

コマンドラインからapplication.jarを起動するときに、SomeDataフォルダー内のいくつかのファイルを解析したいと思います。https://stackoverflow.com/a/320595/1540630で、実行中のjarファイルの現在のパスを取得する方法をすでに示していますが、ステートメントを実行すると、次のようになります。

System.out.println(XMLParser.class.getProtectionDomain().getCodeSource().getLocation().getPath());

...私は次のようになります:

/.../Application/application.jar

しかし、私はただ持っていたい:

/.../Application/

後のステップで私が必要だと言ったほうがいい

/.../Application/SomeData/SomeFolder/data.xml

誰かが私を助けてくれますか?

4

3 に答える 3

4

CodeSource.getLocation()を与えると、URLそれに関連する新しいURLを作成できます。

URL jarLocation = XMLParser.class.getProtectionDomain().getCodeSource().getLocation();
URL dataXML = new URL(jarLocation, "SomeData/SomeFolder/data.xml");

URLパスがすべてのプラットフォームで有効なネイティブファイルパスであるとは限らないため、単純に行うことはできません。new File(...getCodeSource().getLocation().getPath())可能であれば、URLを使用して、URLをXMLパーサーに直接渡す方がはるかに安全ですが、本当に必要な場合は、このようなイディオムjava.io.Fileを使用してURLからURLを作成できます。

于 2012-07-23T13:09:54.253 に答える
1

あなたはすでに文字列としてパスを持っているので。あなたは以下を試すことができます

String path = XMLParser.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

String parentFolder = new File(path).getParent();
于 2012-07-23T13:08:02.570 に答える
1

あなたが瓶の場所を知ったら、あなたは使うことができます

new File(new File(jarPath).getParent(), "SomeData/SomeFolder/data.xml");
于 2012-07-23T13:07:09.310 に答える