Enumeration<NetworkInterface> nets
= NetworkInterface.getNetworkInterfaces();
out.print("List of all network interfaces on this machine:\n");
for (NetworkInterface netint : Collections.list(nets)) {
out.printf("name:%s (%s)\n", netint.getName(), netint.getDisplayName());
}
我正在做一项要求我使用NetworkInterface列出大量信息的作业,但我对Enumeration不太熟悉,所以我遇到了麻烦。
我经历了一些javadocs并成功实现了这一目标。问题是我需要能够多次浏览列表。
例如,我想要使用另一个for循环来循环并列出当前运行的所有接口。
这样的事情:
for (NetworkInterface netint : Collections.list(nets)) {
if (netint.isUp()) {
out.printf("name:%s (%s)\n", netint.getName(), netint.getDisplayName());
}
}
但是,任何时候我在第一个之后使用for循环我都没有得到任何输出。我觉得这与我缺乏理解有关。我似乎无法在任何地方找到解释。
答案 0 :(得分:3)
无法重置枚举。您的代码无法正常工作的原因是您第一次拨打Collections.list(nets)
&#34;耗尽&#34; nets
枚举,因此下一次调用Collections.list(nets)
会产生一个空集合。
要避免这种情况,请从nets
枚举中收集接口,然后迭代结果列表:
List<NetworkInteface> list = Collections.list(nets);
// Iteration 1
for (NetworkInterface netint : list) {
...
}
// Iteration 2
for (NetworkInterface netint : list) {
...
}
答案 1 :(得分:2)
您需要:
NetworkInterface.getNetworkInterfaces()
(以便获得新的Enumeration
对象);或NetworkInterface.getNetworkInterfaces()
的结果存储在列表中一次,然后迭代该列表。说明第二种方法:
List<NetworkInterface> nets = Collections.list(
NetworkInterface.getNetworkInterfaces());
for (NetworkInterface netint : nets) {
...
}
for (NetworkInterface netint : nets) {
...
}
答案 2 :(得分:0)
尝试使用Iterator而不是Enumeration。 参考这个文档, http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html