0

MyRunnableJar.jarコマンドラインから実行したいのですが。から読み取り、file_[1-4].dat処理を行ってから、に書き込む必要がありfile_5.datます。前述のすべてのデータファイルはMyRunnableJar.jar、ファイルシステムの近くにあります。例えば:

  • super_directory/
    • MyRunnableJar.jar
    • data_resources/
      • file_1.dat
      • file_2.dat
      • file_3.dat
      • nested_data_directory/
        • file_4.dat
        • file_5.dat

( Eclipseの機能MyRunnableJar.jarによって作成されました。)Export

私がこの方法で物事をやりたい理由は、アプリケーションが私の小さなラップトップで実行するには計算コストが高すぎるためです。代わりに、リモートサーバー(アクセスする必要のあるすべてのビッグデータファイルを含む)に配置して、そこで実行したいと思います。

問題は、これらのデータファイルがどこにあるかを実行可能なJARに表示する方法がわからないことです。データファイルは、必要に応じて確実に移動できます。ただし、JAR内に保持することはできません。アプリケーションコードを少しでも変更したい場合は、JAR全体を再転送する必要があり、データファイルが含まれていると非常に大きくなります。file_5.datさらに、それが実際に私のJARにある場合、私は書き込むことができません。

Stack Exchangeにはこれに似た質問がたくさんあることは承知していますが、いずれの場合も、いくつかの重要な点で質問が少し異なります。


編集:

  • 受理された回答を参照してください。
  • また、Andreのソリューション(コメントで説明)も機能したことに注意してください。私の場合、JARとデータファイルは常にファイルシステム内で相互に同じ位置にあるためです。
4

1 に答える 1

1

本当にできる必要があるのは、何が返されるか、どこから実行される.jarかに関係なく、ファイルがどのディレクトリにあるかを把握することです。現在、と同じディレクトリにいると想定する必要はありません。そうでない場合は、相対ディレクトリがどこにあるかわからないため、相対ディレクトリを計算できません。System.property("user.dir");MyRunnableJar.jarMyRunnableJar.jar.jar

次のコードスニペットがこれを行います。

return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

クラスに置き換えMyClassますmain

次に、それを使用して、読み取りたいディレクトリへのパスを作成できます。そこからのケーキです。

于 2012-07-15T23:24:05.850 に答える