我有以下代码行:
)
有人可以向新手解释吗?
InputStreamReader isr = new InputStreamReader(MethodHandles.lookup().lookupClass().getResourceAsStream(csvFile));
该代码有效并访问位于jar中的csv文件。我只是不明白每种方法在做什么
我能够将这一行简化为:
MethodHandles.lookup()
lookupClass()
getResourceasStream()
但仍然很困惑。 SQLUtilProd.class做什么?以及getResourceAsStream如何知道从jar中获取文件?如果您有多个罐子怎么办?
不确定,但是我认为我们使用SQLUtil.class来获取类对象,这又使我们能够访问classLoader,而getResourceAsStream用于定位该文件。
如果是这样,那么classLoader在哪里定义包含jar的路径?
答案 0 :(得分:1)
SQLUtilProd.class的作用是什么?
每个对象的数据包含对java.lang.Class类的对象的引用,这由方法getClass返回。还有一个描述java.lang.Class的java.lang.Class对象。请在this链接中阅读更多内容。
getResourceAsStream如何知道如何从jar中获取文件?
getResourceAsStream
将在类路径上找到具有给定名称的资源。用于搜索与给定类关联的资源的规则是通过该类的定义class loader来实现的。请访问this链接。
如果有多个罐子怎么办?
您可以使用以下帮助器功能获取所有资源:
public static List<InputStream> loadResources(
final String name, final ClassLoader classLoader) throws IOException {
final List<InputStream> list = new ArrayList<InputStream>();
final Enumeration<URL> systemResources =
(classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader)
.getResources(name);
while (systemResources.hasMoreElements()) {
list.add(systemResources.nextElement().openStream());
}
return list;
}
我确信阅读link会对您有所帮助。
classLoader在哪里定义包含jar的路径?
系统ClassLoader提供对CLASSPATH中信息的访问。 CLASSPATH可能包含目录和JAR文件。因此,您可以访问项目和jar文件中位于类路径中的所有资源。