2013-05-29 94 views
0

我有一套facebook用戶標識我用我的基於PHP的應用程序收集。Java IO異常 - 流關閉

我將它保存爲一個txt文件並試圖獲取人的真實姓名。我爲此使用java。

正常情況下,http://graph.facebook.com/userid將給名稱和其他信息的JSON響應。

while((temp = br.readLine())!=null){     
    url = new URL("http://graph.facebook.com/"+temp); 
    urlcon = url.openConnection(); 
    bf = new BufferedReader(new InputStreamReader(urlcon.getInputStream())); 
    response = bf.readLine(); 
    Map jsonData=parser.parseJson(response); 
    value=(String)jsonData.get("name"); 
    System.out.println(value); 
} 

我會得到一些輸出,直到我開始得到一個異常。

java.io.IOException: Stream closed 

一些人告訴我設置的用戶代理,所以我試圖

System.setProperty("http.agent", "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6"); 

這似乎並沒有工作。我究竟做錯了什麼 ?

+1

你應該做一些事情:閱讀更多的不僅僅是第一行,以及*** CLOSE *** urlcon。目前,你正在爲Facebook留下很多開放式套接字 – rolfl

回答

0

既然你沒有關閉流,那意味着別人是。一般來說,套接字只能在服務器關閉之前保持一段時間的打開狀態。您可能需要重構代碼,以便每次打開URL連接時,都會將所有數據讀入某種數據結構,關閉連接,然後對數據執行操作。你可以這樣做:

List<String> data; //some data structure you've initialized beforehand. 
String temp; 
while ((temp = bf.readLine()) != null) { 
    data.add(temp); 
} 
bf.close(); 
//do stuff with the data...