文档

Java™教程
隐藏目录
列出上下文
教程:Java命名和目录接口
课程:命名和目录操作

列出上下文

Context.lookup()一次只能获取一个对象不同,您可以使用一个操作来列出整个上下文。有两种方法可以列出上下文:一种返回绑定,一种只返回名称到对象类名称的对。

Context.list()方法

Context.list()返回一个NameClassPair的枚举。每个NameClassPair由对象的名称和其类名称组成。以下代码片段列出了"ou=People"目录的内容(即"ou=People"目录中的文件和目录)。

NamingEnumeration list = ctx.list("ou=People");

while (list.hasMore()) {
    NameClassPair nc = (NameClassPair)list.next();
    System.out.println(nc);
}

运行this example会产生以下输出。

# java List
cn=Jon Ruiz: javax.naming.directory.DirContext
cn=Scott Seligman: javax.naming.directory.DirContext
cn=Samuel Clemens: javax.naming.directory.DirContext
cn=Rosanna Lee: javax.naming.directory.DirContext
cn=Maxine Erlund: javax.naming.directory.DirContext
cn=Niels Bohr: javax.naming.directory.DirContext
cn=Uri Geller: javax.naming.directory.DirContext
cn=Colleen Sullivan: javax.naming.directory.DirContext
cn=Vinnie Ryan: javax.naming.directory.DirContext
cn=Rod Serling: javax.naming.directory.DirContext
cn=Jonathan Wood: javax.naming.directory.DirContext
cn=Aravindan Ranganathan: javax.naming.directory.DirContext
cn=Ian Anderson: javax.naming.directory.DirContext
cn=Lao Tzu: javax.naming.directory.DirContext
cn=Don Knuth: javax.naming.directory.DirContext
cn=Roger Waters: javax.naming.directory.DirContext
cn=Ben Dubin: javax.naming.directory.DirContext
cn=Spuds Mackenzie: javax.naming.directory.DirContext
cn=John Fowler: javax.naming.directory.DirContext
cn=Londo Mollari: javax.naming.directory.DirContext
cn=Ted Geisel: javax.naming.directory.DirContext

Context.listBindings()方法

Context.listBindings()返回一个Binding的枚举。BindingNameClassPair的子类。一个绑定不仅包含对象的名称和类名称,还包含对象本身。以下代码枚举"ou=People"上下文,打印出每个绑定的名称和对象。

NamingEnumeration bindings = ctx.listBindings("ou=People");

while (bindings.hasMore()) {
    Binding bd = (Binding)bindings.next();
    System.out.println(bd.getName() + ": " + bd.getObject());
}

运行这个例子会产生以下输出。

# java ListBindings
cn=Jon Ruiz: com.sun.jndi.ldap.LdapCtx@1d4c61c
cn=Scott Seligman: com.sun.jndi.ldap.LdapCtx@1a626f
cn=Samuel Clemens: com.sun.jndi.ldap.LdapCtx@34a1fc
cn=Rosanna Lee: com.sun.jndi.ldap.LdapCtx@176c74b
cn=Maxine Erlund: com.sun.jndi.ldap.LdapCtx@11b9fb1
cn=Niels Bohr: com.sun.jndi.ldap.LdapCtx@913fe2
cn=Uri Geller: com.sun.jndi.ldap.LdapCtx@12558d6
cn=Colleen Sullivan: com.sun.jndi.ldap.LdapCtx@eb7859
cn=Vinnie Ryan: com.sun.jndi.ldap.LdapCtx@12a54f9
cn=Rod Serling: com.sun.jndi.ldap.LdapCtx@30e280
cn=Jonathan Wood: com.sun.jndi.ldap.LdapCtx@16672d6
cn=Aravindan Ranganathan: com.sun.jndi.ldap.LdapCtx@fd54d6
cn=Ian Anderson: com.sun.jndi.ldap.LdapCtx@1415de6
cn=Lao Tzu: com.sun.jndi.ldap.LdapCtx@7bd9f2
cn=Don Knuth: com.sun.jndi.ldap.LdapCtx@121cc40
cn=Roger Waters: com.sun.jndi.ldap.LdapCtx@443226
cn=Ben Dubin: com.sun.jndi.ldap.LdapCtx@1386000
cn=Spuds Mackenzie: com.sun.jndi.ldap.LdapCtx@26d4f1
cn=John Fowler: com.sun.jndi.ldap.LdapCtx@1662dc8
cn=Londo Mollari: com.sun.jndi.ldap.LdapCtx@147c5fc
cn=Ted Geisel: com.sun.jndi.ldap.LdapCtx@3eca90

终止NamingEnumeration

NamingEnumeration可以通过三种方式终止:自然终止、显式终止或意外终止。

无论枚举如何终止,一旦终止,就不能再使用它。对已终止的枚举调用方法将产生不确定的结果。

为什么有两种不同的列表方法?

list()方法适用于只想在上下文中显示对象名称的浏览器样式应用程序。例如,浏览器可能会列出上下文中的名称,并等待用户选择其中一个或几个名称以执行进一步的操作。这类应用程序通常不需要访问上下文中的所有对象。

listBindings()方法适用于需要批量对上下文中的对象执行操作的应用程序。例如,备份应用程序可能需要对文件目录中的所有对象执行“文件统计”操作。或者打印机管理程序可能想要重新启动建筑物中的所有打印机。为了执行这些操作,这些应用程序需要获取绑定在上下文中的所有对象。因此,将对象作为枚举的一部分返回更加方便。

应用程序可以根据所需的信息类型使用list()或可能更昂贵的listBindings()方法。


上一页:查找对象
下一页:添加、替换或删除绑定