各种答案(例如,从类路径目录获取资源列表)表明,如果您调用getResourceAsStream目录,返回的流将包含目录中的项目列表,每行一个。这似乎没有记录在ClassLoader Javadoc 中。它是在其他地方指定的,还是只是人们依赖的实现细节?
看起来这并没有在任何地方得到适当的记录。
从 Javadoc 中,ClassLoader.getResourceAsStream您可以在某种程度上推断出这与执行然后调用结果 URLgetResourceAsStream相同,因为 Javadoc 指向该方法,该方法返回. 但它显然没有阐明到那么准确的程度。getResourceURL.openStreamgetResourceURL
public InputStream getResourceAsStream(String name)返回用于读取指定资源的输入流。搜索顺序在 的文档中进行了描述
getResource(String)。
然后,URL.openStream记录得更好:
public final InputStream openStream() throws IOException打开与此 URL 的连接并返回用于从该连接读取的 InputStream。该方法是以下方法的简写:
openConnection().getInputStream()
然后,由于URL.openConnection()返回 的子类URLConnection,并且假设您在类路径中使用了本地目录,因此您需要查看FileURLConnection,然后在方法中查看getInputStream。
正如您在下面的方法中看到的,如果file:///类路径中的 URL 指向一个目录,那么它会InputStream以排序的方式返回该目录中的所有文件。(有趣的细节,它使用平台默认编码 - 很高兴知道您何时想读回数据)
public synchronized InputStream getInputStream()
throws IOException {
int iconHeight;
int iconWidth;
connect();
if (is == null) {
if (isDirectory) {
FileNameMap map = java.net.URLConnection.getFileNameMap();
StringBuffer buf = new StringBuffer();
if (files == null) {
throw new FileNotFoundException(filename);
}
Collections.sort(files, Collator.getInstance());
for (int i = 0 ; i < files.size() ; i++) {
String fileName = files.get(i);
buf.append(fileName);
buf.append("\n");
}
// Put it into a (default) locale-specific byte-stream.
is = new ByteArrayInputStream(buf.toString().getBytes());
} else {
throw new FileNotFoundException(filename);
}
}
return is;
}
Run Code Online (Sandbox Code Playgroud)
它没有正确记录,它是一个实现细节,它可能会在未来的版本中发生变化,尽管这不太可能。
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |