Строка, возвращающая нуль после bufferedreader - PullRequest
1 голос
/ 19 марта 2011

Я извлекаю строку из текстового файла из URL-адреса в виде строки, и строка возвращает правильное значение. Однако, если я вызываю строку после чтения, строка возвращает ноль.

Я понятия не имею, что происходит, и буду признателен за любые указания.

    static protected String readURL() {
    String u = "http://adamblanchard.co.uk/push.txt";
    URL url;
    InputStream is;
    InputStreamReader isr;
    BufferedReader r;


    try {
      System.out.println("Reading URL: " + u);
      url = new URL(u);
      is = url.openStream();
      isr = new InputStreamReader(is);
      r = new BufferedReader(isr);
      do {
        str = r.readLine();
        if (str != null)
          System.out.println(str);  //returns correct string
      } while (str != null);
    } catch (MalformedURLException e) {
      System.out.println("Invalid URL");
    } catch (IOException e) {
      System.out.println("Can not connect");
    }
    System.out.println(str);  //str returns "null"
    return str;
  }

Ответы [ 4 ]

2 голосов
/ 19 марта 2011

Метод BufferedReader.readLine() возвращает null, когда достигает конца файла.

Кажется, что ваша программа читает и печатает каждую строку в файле и, наконец, печатает значение str вдно.Учитывая, что условие завершения цикла чтения таково, что str равно null, что (что неудивительно) - это то, что печатается, и то, что возвращается методом.

1 голос
/ 19 марта 2011

Хай, приятель. Посмотри на цикл «делай пока».

do {
        str = r.readLine();
        if (str != null)
          System.out.println(str);  
      } while (str != null); //i.e exit loop when str==null

Итак, str вне цикла равен нулю

0 голосов
/ 19 марта 2011

Вместо do while loop используйте while loop, чтобы проверить подходящее условие и вывести результирующую строку.

   Example construct:           

   BufferedReader in = new BufferedReader(new FileReader("C:/input.txt"));          
   while ((str = in.readLine()) != null) {            
   //write your logic here. Print the required string.          
   }           
0 голосов
/ 19 марта 2011

Вы зацикливаетесь до конца файла в пределах

do {
    str = r.readLine();
    if (str != null)
      System.out.println(str);  //returns correct string
} while (str != null);

Таким образом, впоследствии str будет null.

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