2011-09-07 3 views
5

내 Java 코드의 URL에서 읽으려고합니다. 그러나로드 할 때 명령을 실행하고 완전히로드되기 전에 InputStreamReader가 페이지를 읽습니다. 그래서 내 버퍼 된 리더는 실제 내용이로드되기 전에 페이지의 HTML 만 수집합니다.Java에서 URL에서 내용을 읽기 전에 페이지가로드 될 때까지 기다려주십시오.

나의 주요 목표는 페이지에서 "영업"이라는 단어를 찾는 것이지만 전체 페이지가로드되기 전에 열린 스트림이 연결되어 있다면이를 수행 할 수 없습니다. 로드 할 때까지 기다릴 수있는 방법이 있습니까?

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'는 스트림에 더 이상 내용이 없을 때까지 순차적으로 페이지를 읽습니다. 페이지가 쓴 내용은 모두 읽혀집니다. 페이지가 동적 인 경우에도 내용을 계속 가져옵니다. 로드 후 작업이 자바 스크립트에서 수행되면 자바 스크립트를 실행하거나 가져 오지 않기 때문에이 방법은 절대로 작동하지 않습니다. – jiggy

답변

1

이제 그 수있는 팁을 문제가 해결되지 않습니다 먼저 몇 가지 자바 코딩 팁 :

여기 내 코드입니다.

코드를 리팩터링하고 try-finally에서 마지막으로 블록을 닫은 스트림을 사용하여 예외가 발생해도 항상 닫히도록해야합니다. 그럼 int로 indexOf을 사용하지 않을 것입니다. 코드를 더 명확하고 읽기 쉽고 덜 장황하게 만들려면 if 문에 직접 if(inputLine.toLowerCase().contains("sales")){ 을 직접 쓰고 모든 인덱스 코드를 제거하십시오.

apache API http://hc.apache.org/httpcomponents-client-ga/index.html을 사용해 홈페이지를 가져올 수 있습니다.

+0

팁 주셔서 감사합니다! 그러나 나는 아파치 httpcomponents를 조사해 보았고 데이터가 원래 URL openstream 접근법과 같아지기 전에 데이터를 얻을 수 있었지만 여전히 페이지의 일부만로드했다. http://hc.apache.org/httpclient-3.x/tutorial.html에서 소스를 사용했습니다. 음 .. – Chris

관련 문제