2011-10-31 95 views

回答

0

最佳答案我找到了:

public static String readPage(String url, String delimeter) 
{ 
    try 
    { 
     URL URL = new URL(url); 
     URLConnection connection = URL.openConnection(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
     String line, lines = ""; 
     while ((line = reader.readLine()) != null) 
     { 
      if(lines != "") 
      { 
       lines += delimeter; 
      } 
      lines += line; 
     } 
     return lines; 
    } 
    catch (Exception e) 
    { 
     return null; 
    } 
} 
1

查看Java API中的URL Class

很確定你需要的只是在那裏。

+0

請問您可以添加示例代碼嗎? – Tyilo

0

首先使用URL類的java從服務器下載文件。

String url = "http://url"; 
java.io.BufferedInputStream in = new java.io.BufferedInputStream(new 
java.net.URL(url).openStream()); 
java.io.FileOutputStream fos = new java.io.FileOutputStream("file.txt"); 
java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024); 
byte data[] = new byte[1024]; 
while(in.read(data,0,1024)>=0) 
{ 
    bout.write(data); 
} 
bout.close(); 
in.close(); 

然後閱讀使用FileInputStream級Java

File file = new File("file.txt"); 
int ch; 
StringBuffer strContent = new StringBuffer(""); 
FileInputStream fin = null; 
try { 
fin = new FileInputStream(file); 
while ((ch = fin.read()) != -1) 
strContent.append((char) ch); 
fin.close(); 
} catch (Exception e) { 
System.out.println(e); 
} 
System.out.println(strContent.toString()); 
+0

爲什麼要先下載到文件中?另外,文件到字符串的轉換是有問題的:''StringBuffer'(與'StringBuilder'),無緩衝的單字符讀取,以及異常時泄漏文件句柄 - 並且這將在多字節Unicode字符上可怕地破裂。 –

+0

你可以討論更多關於文件到字符串可疑性的問題嗎? – RanRag

+0

「StringBuffer」的大多數方法在內部同步,這裏不需要,「StringBuilder」不需要。讀取單個字符(或任何其他字符)非常慢 - 將'FileInputStream'封裝到'BufferedInputStream'中,然後'BufferedReader'會提高速度。 'BufferedReader'也可以處理任何多字節的Unicode字符。另外,'fin.close()'應該在finally塊中,所以流總是關閉的 - 就像它拋出'fin.read()'時關閉一樣。我通常會使用一些庫來將一個流轉換爲字符串,而不是寫我自己的。 –

1

的下載的文件,我建議Apache HttpClient:簡單,乾淨的代碼,它處理由服務器發送的字符編碼 - 這java.net.URL/java.net.URLConnection力你自己處理:

String url = "http://example.com/file.txt"; 

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(new HttpGet(url)); 
String contents = EntityUtils.toString(response.getEntity()); 
+0

如果沒有這個,可以做到這一點嗎? – Tyilo

+0

是的,但它將會有很多代碼已經被編寫,測試並在其他地方證明。我不會推薦從頭開始寫這樣的東西。 –

相關問題