2011-09-07 78 views
5

我正在阅读我的java代码中的url,但是我想要读取的页面在加载时执行命令,并且InputStreamReader在完成加载之前读取页面,所以我的缓冲阅读器仅在加载真实内容之前收集页面上的HTML。从Java中的URL读取内容之前加载页面

我的主要目标是在页面上找到单词“sales”,但如果打开的流在加载完整页面之前已连接,则无法执行此操作。有没有办法等待它加载或什么?

这里是我的代码:

URL url = new URL("http://urlgoeshere.com?"+ withAParam); 
     URLConnection uc = url.openConnection(); 
     uc.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
     String inputLine = in.readLine(); 
     int index = -1;    
     while ((inputLine = in.readLine()) != null){ 
      index=inputLine.toLowerCase().indexOf("sales"); 
      if(index>=0){ 
      log.info("Found sales!"); 
       break;     
      } 
     } 
     if (in != null){ 
      in.close(); 
     } 
+0

这没有意义。 “BufferedReader”将顺序读取页面,直到流没有更多内容。页面写入的任何内容都将被读取。如果页面是动态的,它仍然会提取内容。如果加载后的操作是在JavaScript中完成的,那么这种方法将无法执行,因为它不会执行,甚至不会获取JavaScript。 – jiggy

回答

1

现在首先一些Java编码提示,不会解决你的问题,然后一个尖端的可能。

您应该重构代码并使用try-finally关闭finally块中的流,以确保即使在抛出异常时它也总是关闭。 然后,我不会使用带有int的indexOf。为了使代码更加清晰,可读并且不那么冗长,直接在你的if语句中写入if(inputLine.toLowerCase().contains("sales")){ 并删除所有索引代码。

您可以尝试apache API http://hc.apache.org/httpcomponents-client-ga/index.html来获取主页。

+0

感谢您的提示!然而,我看着Apache的httpcomponents,虽然我可以像以前一样获取数据,但它与原始URL的openstream方法一样 - 它仍然只加载页面的一部分。我使用的源代码是:http://hc.apache.org/httpclient-3.x/tutorial.html。嗯.. – Chris

相关问题