# 读取属性

> 原文： [https://docs.oracle.com/javase/tutorial/jndi/ops/getattrs.html](https://docs.oracle.com/javase/tutorial/jndi/ops/getattrs.html)

要从目录中读取对象的属性，请使用 [`DirContext.getAttributes（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#getAttributes-javax.naming.Name-) 并将其传递给您想要属性的对象的名称。假设命名服务中的对象具有名称`“cn = Ted Geisel，ou = People”`。要检索此对象的属性，您需要 [`code`](examples/GetAllAttrs.java) ，如下所示：

```
Attributes answer = ctx.getAttributes("cn=Ted Geisel, ou=People");

```

然后，您可以按如下方式打印此答案的内容。

```
for (NamingEnumeration ae = answer.getAll(); ae.hasMore();) {
    Attribute attr = (Attribute)ae.next();
    System.out.println("attribute: " + attr.getID());
    /* Print each value */
    for (NamingEnumeration e = attr.getAll(); e.hasMore();
         System.out.println("value: " + e.next()))
        ;
}

```

这会产生以下输出。

```
# java GetattrsAll
attribute: sn
value: Geisel
attribute: objectclass
value: top
value: person
value: organizationalPerson
value: inetOrgPerson
attribute: jpegphoto
value: [B@1dacd78b
attribute: mail
value: Ted.Geisel@JNDITutorial.example.com
attribute: facsimiletelephonenumber
value: +1 408 555 2329
attribute: telephonenumber
value: +1 408 555 5252
attribute: cn
value: Ted Geisel

```

## 返回选定的属性

要读取属性的选择性子集，您需要提供一个字符串数组，这些字符串是要检索的属性的属性标识符。

```
// Specify the ids of the attributes to return
String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"};

// Get the attributes requested
Attributes answer = ctx.getAttributes("cn=Ted Geisel, ou=People", attrIDs);

```

[`This example`](examples/GetAllAttrs.java) 要求`“sn”`，`“telephonenumber”`，`“golfhandicap”`和`“mail”` ]对象的属性`“cn = Ted Geisel，ou = People”`。该对象具有除`“golfhandicap”`属性之外的所有属性，因此在答案中返回三个属性。以下是示例的输出。

```
# java Getattrs
attribute: sn
value: Geisel
attribute: mail
value: Ted.Geisel@JNDITutorial.example.com
attribute: telephonenumber
value: +1 408 555 5252

```