2011-09-07 70 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

相關問題