URL-адрес вопроса - PullRequest
       1

URL-адрес вопроса

1 голос
/ 07 июля 2011

Я читаю URL со следующим кодом:

URL myURL = new URL("htpp://path_to_my_file");
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(myURL.openStream()));

    while (reader.ready()) {
                String line = reader.readLine();
    ...
    }
} catch (IOException e) {
        throw new RuntimeException("Parsing of file failed: " + myURL, e);
}

Может ли случиться, что файл прочитан не полностью? (из-за проблем с сетью или что-то еще?). Если да, есть ли способ проверить это или вообще избежать?

Предыстория: я работаю над приложением (не написанным мною до этого момента), и пользователи сообщают мне, что некоторые части файлов иногда отсутствуют. Это происходит спорадически, поэтому я только предположил, что иногда происходит сбой при чтении файла, но у меня слишком мало java-фона, чтобы быть уверенным ...

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Да, вы будете знать, что это произошло, когда вы получите IOException согласно документам Reader.readLine .

Итак, вы захотите поймать Исключение, что-то вроде этого:

try {
    while (reader.ready()) {
            String line = reader.readLine();
    }
}
catch(IOException e) {
 // Bah! Humbug!
 // Should really log this too. So if you're using Log4j:
    log.error("Error reading from URL " + myURL.toString(), e);
} finally {

    try { if (reader != null) reader.close(); }catch(Exception e){}
}
0 голосов
/ 08 июля 2011

Где-то здесь я нашел следующий комментарий:

ready ()! = Имеет больше

ready () не означает, что есть еще данные для чтения.Он показывает только, может ли чтение заблокировать поток.Вполне вероятно, что он вернет false до того, как вы прочитаете все данные.

Чтобы узнать, нет ли больше проверки данных, если readLine () возвращает null

Звучит, что реализацияс reader.ready () вызывает мою проблему.Я не прав с этим предположением?

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