3

使用しているeclipseのresourcesフォルダーに画像があります。問題は、画像を含める方法がわからないことです。絶対パスが非常に長く、getResourceがnullpointerを返します。私はグーグルとSOを検索し、役に立たない通常の解決策を試しました。resourcesフォルダーはビルドパスにあり、コードを実行しているクラスはビルドパスにありますが、次の両方がnullを返します。

System.out.println(getClass().getResource("data.txt"));
System.out.println(getClass().getResource("/resources/data.txt"));

今試しています:

System.out.println(getClass().getResource("001.txt"));

それでもnullを返します。

System.out.println(getClass().getResource("/001.txt"));

また、null。

ファイルを右クリックして、ワークスペースを基準にしたパスを検索します(ファイル、プロパティ、パスを右クリック)

System.out.println(getClass().getResource("/ovinger/resources/sokoban_levels/001.txt"));

またnull

これがワークスペースとリソースフォルダーの画像です。コードは「TestSokoban.java」から実行されています。Eclipse ビルドパス ワークスペース にデスクトップを検索し、管理者として実行する権限がないのではないかと心配していましたが、それでも同じ問題が発生します。

4

4 に答える 4

2

を実行して、相対パスのルートがどこにあるかを見つけることほど簡単なことはありませんSystem.out.println(getClass().getResource("."));。次に、相対パスに適切に適合するようにパスを変更します。それは、クラスが配置されているパッケージである必要があります。

于 2013-02-25T22:33:56.823 に答える
0

eclipseは、binデフォルトでフォルダーにあるコンパイル済みコードを実行するか、プロジェクトtargetに使用している場合はフォルダーに実行されることに注意してください。mavenこれは、プロジェクトをビルドする必要があることを意味します。

ビルドを実行した後、binフォルダーを調べてファイルを調べます。それはあなたがロードしなければならないパスです。

classpath rootあなたがそれをし、リソースがその時の標準的な方法で終わると仮定すると、次のようになります。

ClassLoader.getSystemResourceAsStream("file.txt");

それでも問題が解決しない場合は、次のことを試してください。

Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt");

java class後者の形式は、スポーンでを実行している場合に役立ちます。

于 2013-02-25T22:35:50.450 に答える
0

getClass().getResource()ファイルシステムのパスではなく、クラスパスから読み取ります。したがって、クラスパスのルートからパッケージ/リソース表記を使用する必要があります。

于 2013-02-25T22:28:14.033 に答える
-1

BufferedReader を使用してファイルを文字列に読み込んでみませんか?

于 2013-02-25T22:24:56.023 に答える