2011-03-19 62 views
1

我從url中的文本文件中抓取一行作爲字符串,並且字符串返回正確的值。但是,如果我在讀取字符串後返回null,則調用該字符串。緩衝讀取器之後返回空字符串

我不知道發生了什麼,並會感謝任何指導。

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

回答

2

當它到達文件末尾的BufferedReader.readLine()方法返回null

您的程序似乎正在讀取並打印文件中的每一行,最後在底部打印str的值。假設終止讀取循環的條件是strnull,那麼打印的內容(而不是出人意料的)就是打印的內容以及該方法返回的內容。

0

你循環,直到文件結尾內

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

因此事後strnull

1

海巴迪。看看你做的循環。

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

因此,外循環str爲null取而代之的是do while loop

0

使用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.   
    }