例如,如果com.google程序包存在于某个JAR中(例如Guava),则此代码段会在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”指向“普通”资源文件或目录,是否有方法测试?
'try {stream.read(); System.out.println(“它在文件系统上!”); } catch(NullPointerException npe){System.out.println(“它在JAR!”); }' –
@AdrianPetrescu我想区分类路径目录和文件,而不是“JAR文件”和“文件系统上的文件或目录”。另外,我宁愿不依赖任何无证件。 –