2016-07-22 14 views
3

ファイルusers.txtのファイルパスはmyPlugin/impl/src/main/resources/myPlugin/impl/src/main/java/com/company/myPlugin/impl/users.txtです。私はmyPlugin/impl/src/main/java/com/company/myPlugin/impl/UserManagerのファイルパスを持つJavaクラスからこのファイルにアクセスしようとしています。作業ディレクトリが変更されるため、パスをハードコードしたくありません。私は試しました:Javaで相対パスでファイルを読み込む方法は?

String path = System.getProperty("user.dir") + .....path to users.txt; 

この問題は、プラグインをローカルで実行した場合にのみ問題があることです。別のマシンまたはサーバーにデプロイされている場合、作業ディレクトリにすべてのファイルが含まれているわけではありません。本当に必要なのは、myPluginからの相対パスのみを使用してファイルを開く方法です。私も試しました

URL path = getClass.getResource(""); 

そして、残りのパスを追加しましたが、これはうまくいきませんでした。現在の作業ディレクトリに依存しない相対パスだけを使用することもできますか?サーバー上でプラグインを実行すると、作業ディレクトリにソースコードまたはディレクトリ構造が含まれません。

+0

経由でアクセス可能であるべき、とあなたはそれがWebアプリケーションであるかどうかを確認することができますか? –

+0

私はmavenを使用しますが、Webアプリケーションではありません。 – SVN600

答えて

1

ファイルの場所は、myPlugin/impl/src/main/resources/users.txtの2つの部分で構成されています。最初のものは、ビルドシステム(Maven)があなたのリソースを見つける場所です。 2番目はあなたの実際のリソースです。

myPlugin/impl/src/main/resources(両方のファイルとディレクトリ)の下のすべてがクラスパスにコピーされます。

あなたの質問に答えるために、あなたのファイルは、アプリケーションを構築するためにMavenを使用する

getClass().getClassLoader().getResource("users.txt"); 
+0

これは、クラスパス上のファイルの場所が、getClass()、getResource()が呼び出された場所と同じパッケージにあることを前提としています。私はその質問を見るとそうではありません。 'getClass()。getClassLoader()。getResource()'が良いアドバイスかもしれません。 – Gimby

+0

これは理論的にはうまくいくと思われるが、そうではない。生成されるパスは、 "/ target/class"ディレクトリからの正しいパスですが、プログラムによってファイルが見つかりません。 – SVN600

+0

@Gimbyリソースがデフォルトのパッケージに含まれているとすれば、あなたの修正は不可欠です。ありがとうございました。 – Arkadiy

関連する問題