stream.read()
行会抛出NullPointerException异常。ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource("com/google");
InputStream stream = resource.openStream();
System.out.println(stream.toString()); // Fine -- stream is not null
stream.read(); // NPE inside FilterInputStream.read()!
如果将com/google
与文件系统中而不是JAR中的软件包交换,则代码片段根本不会崩溃。实际上,它似乎会读取该目录中由换行符分隔的文件,尽管我无法想象该行为在任何地方都有规定。
是否有一种方法可以测试资源路径“com/google”指向“常规”资源文件还是目录?
如果将com/google
替换为文件系统中的软件包而不是JAR,则代码片段完全不会崩溃。事实上,它似乎会读取该目录中由换行符分隔的文件,尽管我无法想象这种行为在任何地方得到了规定。
是否有一种方法可以测试资源路径“com/google”指向“普通”资源文件还是目录?
try { stream.read(); System.out.println("It's on the filesystem!"); } catch (NullPointerException npe) { System.out.println("It's in a JAR!"); }
- Adrian Petrescu