Eclipseのプロジェクトのresourcesフォルダーにファイルがあります。このドキュメントをJavaファイルにロードする方法が必要です。望ましい表現はInputStreamにあります。
いくつかの検索に基づいて次のことを試しましたが、機能していないようで、理由がわかりません(nullになる)、助けていただければ幸いです
InputStream is = getClass().getResourceAsStream("/Project/resources/BlankPDF.pdf");
Eclipseのプロジェクトのresourcesフォルダーにファイルがあります。このドキュメントをJavaファイルにロードする方法が必要です。望ましい表現はInputStreamにあります。
いくつかの検索に基づいて次のことを試しましたが、機能していないようで、理由がわかりません(nullになる)、助けていただければ幸いです
InputStream is = getClass().getResourceAsStream("/Project/resources/BlankPDF.pdf");
リソースがコンパイル済みクラスと同じフォルダーにあることを確認してください。Eclipseは使用していませんが、Netbeansはビルド時に「classes」フォルダを自動的に作成します。パッケージ内にあるクラス、つまりorg.website.PDFReader
、は、クラスの完全修飾名(つまり、パッケージ名+クラス名)の後に、「classes」フォルダの下に一連のサブディレクトリを持ちます。とにかく、これらのパッケージ化されたクラスの「親ディレクトリ」は「classes」フォルダのままです。
当面は、リソースをそのクラスフォルダに手動で配置してください。ビルド時にEclipseがリソースを適切なフォルダーに自動的にコピーするようにする方法はほぼ確実にあります(以下を参照)。
最後に、コードで、先頭の「/」を「/ Project/...」から削除します。
その先頭の「/」を削除すると、クラスのクラスローダーの親ディレクトリ(この例では「classes」フォルダー)を基準にしたリソースの場所になります。そのスラッシュを保持すると、リソースの場所が「絶対」になり、親ディレクトリからの相対位置になりません。
編集:次の質問は、このプロセスのよりEclipse固有の詳細に役立つはずです:EclipseのJava:getResourceを使用してロードしたいファイルをファイルシステムのどこに置くのですか?(たとえば、ImageIconの画像)。受け入れられた回答の最初のコメントも確認してください。
引数として渡す文字列は、呼び出し元のクラスに相対的なgetResourceAsStream
場所であるか、または任意のソースフォルダの先頭に。が付いている絶対的な場所である必要があります。getResourceAsStream
/
したがってresources
、プロジェクト内のソースフォルダー(Eclipseではパッケージのような小さな記号でマークされている)であれば、getClass().getResourceAsStream("/BlankPDF.pdf")
機能するはずです。
例:プロジェクトに次のフォルダーとパッケージがあり、ソースフォルダーが:でマークされているとします*
。
Project
src*
com.package.foo
MyClass.java
resources*
BlankPDF.pdf
次に、MyClass.class.getResourceAsStream("/BlankPDF.pdf")
(先頭/
、絶対)とMyClass.class.getResourceAsStream("../../../BlankPDF.pdf")
(先頭なし/
、相対)の両方でファイルを取得する必要があります。