Подождите, пока страница загрузится, прежде чем читать содержимое с URL в Java - PullRequest
5 голосов
/ 08 сентября 2011

Я читаю по URL в моем коде Java, но страница, которую я хочу прочитать, выполняет команду при загрузке, и InputStreamReader читает страницу до ее полной загрузки, поэтому мой буферизованный читатель собирает только HTML-код на страницереальный контент загружен.

Моя главная цель - найти слово «продажи» на странице, но я не могу этого сделать, если открытый поток подключен до загрузки полной страницы.Есть ли способ дождаться его загрузки или что-то?

Вот мой код:

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(); 
        }

1 Ответ

1 голос
/ 08 сентября 2011

Теперь сначала несколько советов по Java-кодированию, которые не решат вашу проблему, а затем совет, который может.

Вы должны реорганизовать свой код и использовать try-finally, когда вы закрываете поток в блоке finally, чтобы убедиться, что он всегда закрывается, даже когда выдается исключение. Тогда я бы не использовал indexOf с int. Чтобы сделать код более четким, читабельным и менее многословным, напишите if(inputLine.toLowerCase().contains("sales")){ непосредственно в вашем операторе if и удалите весь индексный код.

Вы можете попробовать API Apache http://hc.apache.org/httpcomponents-client-ga/index.html для загрузки домашней страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...