由于您通过Class
对象使用资源文件,因此资源的路径必须是绝对的:
getClass().getResourceAsStream("/Subfolder/file.txt");
请注意,做你所做的事情是一个坏主意,也就是说,在你没有参考的资源上打开扫描仪:
new Scanner(someInputStreamHere());
您没有对该输入流的引用,因此您无法关闭它。
更重要的是,如果资源不存在则.getResource*()
返回;null
在这种情况下,您将获得 NPE!
如果您使用 Java 6(使用 Guava 的 Closer),建议您:
final URL url = getClass().getResource("/path/to/resource");
if (url == null) // Oops... Resource does not exist
barf();
final Closer closer = Closer.create();
final InputStream in;
final Scanner scanner;
try {
in = closer.register(url.openStream());
scanner = closer.register(new Scanner(in));
// do stuff
} catch (IOException e) {
throw closer.rethrow(e);
} finally {
closer.close();
}
如果您使用 Java 7,只需使用 try-with-resources 语句:
final URL url = getClass().getResource("/path/to/resource");
if (url == null) // Oops... Resource does not exist
barf();
final InputStream in;
final Scanner scanner;
try (
in = url.openStream();
scanner = new Scanner(in);
) {
// do stuff
} catch (IOException e) {
// deal with the exception if needed; or just declare it at the method level
}