快速业务通道

使用泛型和并发改善集合 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
以您可以忽略它们。但是,修复该集合以显式地指 定类型,将会避免在编译时遇到这些警告引起的一个真正的错误。

禁止编译器警告

如果您使用的是一个不能或不想更改的库,那么您可以禁止编译器警告。 @SuppressWarnings 注释会告诉编译器您知道代码生成了警告,但是您不想看到 它们。如果您将下面这行代码添加到想要忽略其警告的方法前面,则编译器不再 显示该方法的警告:

@SuppressWarnings("unchecked")

现在,当您编译该类时,将不会看到警告消息或错误消息。如果处理未预料 到的数据类型,您仍然有可能获得 ClassCastException。选择权在您手中。

读取网页

现在您应该深刻了解了泛型的用途,以及它们如何使您的程序更容易维护。 下一步是创建一个程序来收集某个特定网页上的所有链接。尽管您可以自己写一 个程序来读取网页并解析其内容,但是不必这么做。Swing 组件库提供了这项功 能。您需要做的就是查找与页面上的锚(<a>)标记相关联的 href 属性 。

使用泛型和并发改善集合(4)

时间:2011-06-16 John Zukowski

获取文档

javax.swing.text.html 包包含一个 HTMLEdito***t。如果您向它提供一个 流,它会解析相关的网页。根据这个解析的流,您可以告诉工具箱遍历所有可用 的标记,并获得锚标记的 href 属性。程序的功能还可以更加丰富,可以收集图 像标记或 Flash 影片,但是它只会收集 <a href="...">xxx</a> 形式的内容。

您需要做的只是创建一个新的 HTMLEdito***t 实例,并将一个 Reader 传入 到内容中。因为想法是从远程网站获得内容,所以您必须使用在命令行输入的 http:// 字符串来获得 Reader,该字符串随后被传递到 URL 构造器,您可以从 中获得一个 URLConnection。这个过程听起来很复杂,其实并不是这样。清单 4 显示了它的工作原理:

清单 4. 读取网页

HttpURLConnection.setFollowRedirects(false); Edito***t kit = new HTMLEdito***t(); Document doc = kit.createDefaultDocument(); doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE); String uri = args[0]; Reader reader = null; if (uri != null && uri.startsWith("http")) {   URLConnection conn = new URL(uri).openConnection();   reader = new InputStreamReader(conn.getInputStream()); } else {   System.err.println(   "Usage: java ListUrls http://example.com/startingpage");   System.exit(-1); } kit.read(reader, doc, 0);

与连接相关联的输入流被提供给 Edito***t 的 read() 方法。read() 的其 他参数包括一个 Document 和一个开始读取的位置,前者是您通过调用工具箱的 createDefaultDocument() 方法创建的,后者通常为 0,表示流的起点。

清单 4 添加了两个有帮助的附加任务。调用 HttpURLConnection 类的 setFollowRedirects() 方法可禁止后面的重定向请求。而设置 Document 的 IgnoreCharsetDirective 属性是因为,当页面的 <meta> 标记中包含一 个 charset 属性时,HTMLEdito***t 中明显存在一个 bug。

遍历元素

您将使用的下一个 Swing 类是 ElementIterator,可以在 javax.swing.text 包中找到。使用 Document(与刚创建的 Document 类似), 您可以遍历其中所有的元素:

ElementIterator it = new ElementIterator(doc); javax.swing.text.Element elem; while ((elem = it.next()) != null) {   // ... }

通过搜索 <a> 标记,您可以获得相关的 href 属性并添加到发现的链 接集合中。这里使用的集合是一个 Set,因为没有必要收集重复的内容:

Set<String> uriList = new TreeSet<String

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号