次のような階層を持つプロジェクトがあります(Eclipseでは、それは問題ではありません):
-src
---Start.java
---resources
-----media
-------intro.wav
-----textures
-------logo.png
-------tiles.abotm
では、次のように使用して InputStream としてStart.java
取得しようとしています:tiles.abotm
Class.getResourceAsStream(String)
public class Start
{
public static void main(String[] args)
{
try
{
InputStream in = Start.class.getResourceAsStream(
"/resources/textures/tiles.abotm");
}catch(Exception e){
e.printStackTrace();
}
}
}
簡単ですよね?残念だけど違う。InputStream はサイズが 0 で完全に空です。 FileInputStream を の絶対位置に直接開いてみましたtiles.abotm
が、同じ結果が得られました。ファイルが空ではないことはわかっています。実際、Windows、Eclipse、および前述の FileInputStream の作成に使用される File オブジェクトによると、2,257 バイトあります。また、File オブジェクトによれば、読み取り可能、書き込み可能、存在する、ディレクトリではなく、その名前はtiles.abotm
. では、File オブジェクトがそれを読み取ることができる場合、なぜ InputStream で開くことができないのでしょうか??
--EDIT-- とtextures
呼ばれるディレクトリに別のファイルがlogo.png
あり、まったく同じ方法で開いて読み取ることができることを忘れていました。このファイルだけです。
-- fge への返信として、これが実際のコードです: Loader.loadTextureMap("/resources/textures/tiles.abotm");//これは別のクラスの別のメソッドで呼び出されます。
public class Loader{
public static TextureMap loadTextureMap(String texMap){
DataInputStream dis = new DataInputStream(
Start.class.getResourceAsStream(texMap));
//It then goes on to read it, but I've determined that at this point,
there is nothing in this DataInputStream.
}
}