2017-06-30 5 views
0

Javaプロジェクトのリソースを取得することは、私の意見ではドキュメントがそれをうまく説明していないので、いつもかなり混乱していました。プロジェクトで使用するたびに再学習する必要があります。最近、JavaFXを使用して、イメージをロードしようとしていました。コンストラクタには、ファイルパスを表す文字列が必要です。私は過去にこれを行う非常にハッキリな方法を思いついたが、私は最近this StackOverflowの投稿に出くわしました。そして受け入れられた答えは、Eclipseプロジェクトのトップレベルを参照する非常に簡単な方法を示しています。ビルドパスで簡単に私のイメージファイルを見つけることができます。Javaファイル名文字列のファイルパスに "file:"接頭辞を使用していますか?

この特定の区切り文字の名前はありますか?それのような他の区切り文字はありますか?実行可能なJARでこのコードを実行するときに、この表記法を使用する際に問題がありますか?

すべての情報をいただければ幸いです。これが最善の方法ではなく、誰かが将来これをどうやって行うのかについての適切で簡単な説明や、それをうまく説明する記事へのリンクを与えることができます。

+0

「この特定の区切り文字」とはどういう意味ですか? – cybersam

+0

私は彼が 'file:'を意味すると思います。 – ProgrammersBlock

+0

正しい、@ProgrammersBlock –

答えて

2

リソースは、相対パスまたは絶対パスを使用して取得できます。相対パスは、アプリケーションが実行されるディレクトリである「作業ディレクトリ」から開始します。絶対パスは曖昧ではありません。作業ディレクトリはクラスパスの前にチェックされます。これは、場所で使用されているものです

new File(filepath). 

Javaを実行するときに考慮するクラスパスもあります。一部の人々は、リソースを探しもう一つの方法は、クラスローダが相対パスとして文字列を受け入れることができますし、クラスパスに沿ってそれぞれの場所をチェックします

ClassLoader.getResource(String) 

ClassLoader.getResourceAsStream(String) 

です。それは通常、クラスパスに含まれているクラスファイルが生成される場所にコピーされますので、 https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String)

人々は、srcフォルダ内の自分のファイルを置くことによって、結果を取得します。 あなたが話す「トップレベル」は作業ディレクトリです。 Eclipseはデフォルトで作業ディレクトリをプロジェクトルートに設定します。

1

relevant wikipedia pageは、file:スキームをうまくカバーしています。

しかし、私たちは厄介な世界に住んでおり、さまざまなソフトウェアが古い標準に準拠している場合や、標準に完全に準拠していない場合や、代替構文のサポートを含む場合があります。特定のソフトウェアシステムで使用する正しい構文を理解することは、残念なことに必ずしも単純ではありません。

+0

この場合、パスはC:\ドライブに解決されませんでした。これはプロジェクトルート(Eclipseプロジェクトのsrcフォルダの親)を参照していました。したがって "file:res/images/etc.png"では、 "res"フォルダがsrcフォルダと同じディレクトリに存在するので、resフォルダからイメージを取得します。あるいは、Wikiのエントリを理解していないのですか? –

+0

実際には、「プロジェクトルート」は参照されませんでした。これは「プロセスの現在のディレクトリ」を指しています。IDEは現在のディレクトリをプロジェクトルートに設定します。しかし、あなたが別のディレクトリにいる間から手でアプリケーションを起動すると、そのような保証はありません。 –

+0

これは実行可能なJARにとっては悪い考えでしょうか? –

関連する問題