2010-09-27 191 views
2

好的,所以这是返回null的行。我在创建FileInputStream时做了什么错误?FileInputStream是否为空?

FileInputStream fin = new FileInputStream(new File(getClass().getResource("data/levellocks.lv").toURI())); 
+2

究竟哪个部分是'null'?它不能fin,因为'new'永远不会返回'null'。 – 2010-09-27 21:38:31

回答

2

除非你真的需要一个文件输入流,你行可以简化为:

InputStream in = getClass().getResourceAsStream("data/levellocks.lv"); 

Class.getResource()和Class.getResourceAsStream是相对于包。为了得到相对于classpath的根目录的文件,你可以调用的类加载器的方法:

InputStream in = getClass().getClassLoader().getResourceAsStream("data/levellocks.lv"); 

你确定该文件是在你的二进制文件夹,旁边的.class文件?不只是在.java文件旁边的源文件夹中?

3

可以为空的唯一的事情有的getResource( “数据/ levellocks.lv”),这是调用toURI调用失败

+0

但是如果文件存在,它仍然可以为空吗?因为我检查了两次,它是O_O – William 2010-09-27 21:39:07

+2

它不在你认为它的区域 – AHungerArtist 2010-09-27 21:39:52

2

无论的getClass或可能的getResource返回null。其他一切都应该成功或抛出异常。

2

我其实只是处理了这个问题(我不是专家),但尝试调试,看看构造函数试图解析名称。对我而言,这是全班的一揽子计划。所以当我把文件放在预期的文件夹中时,它找到了它。

对于你来说可能会有所不同,因为我使用的是maven。但是我把它放在src/main/resources中,它找不到它。当我在com.work.hin.terminology.match(它是该类的包)的src/main/resources中放置一个文件夹结构时,它找到了它。