これを 100% 確実に互換性のある適切な方法で行うことは不可能だと思います。Java は実際には、クラスパス メカニズムを介して、ファイル システムからユーザーを少しだけ抽象化しようとします。
それでも、通常はクラスローダーを介してファイル パスを取得できます。最初のステップは、関心のあるリソースを見つけることができるクラスローダーへの参照を取得することです (通常、独自のクラスのクラスローダーは正常に動作します。より複雑なシナリオの場合は、どのクラスローダーを使用するかを知っておく必要があります)。 .
次に、特定のリソースの場所を URL としてクラスローダーに問い合わせることができます。次に例を示します。
final ClassLoader loader = getClass().getClassLoader();
final URL resourceLocation = loader.getResource("com/mycomp/coolapp/checkthis.doc");
運が良ければ、URL はfile:/
プロトコルを使用し、ローカル ファイル システム上の場所を記述します。その場合は、このパスを抽出して、検索したばかりのクラスパス リソースのファイル システムの場所として使用できます。それがfile:/
リソースでない場合、そのクラスはローカル マシン上に存在しない可能性がある (たとえば、RMI を介してリモートで読み込まれている) ため、いずれにせよ運が悪くなります。
これが複雑に聞こえる場合は、Java 起動スクリプト (例: java ... -Dworking.dir=$(pwd)
) からシステム プロパティとして作業ディレクトリを渡すことができます。