一、範例實作-使用URL及HttpURLConnection類別,讀入寫出純文字網頁
package ch14;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
public class Test1 {
public static void main(String args[]) throws Exception {
URL url = new URI("https://hackmd.io/s/tutorials-tw").toURL();
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
final int statusCode = connection.getResponseCode();
if (statusCode == 200) {
try (InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);) {
// BufferedReader 專門處理純文字資料,用來讀出純文字
String line;
while ((line = br.readLine()) != null) { // 使用BufferedReader內的readLine()方法
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
connection.disconnect();
}
}
}
}
二、範例解說
Reader
),不是位元組(InputStream
)。在上面的範例,BufferedReader負責接收InputStreamReader物件。三、補充
[網路/檔案資料]
│
▼
InputStream
(位元組流: byte[])
──────────────────────────────
這裡讀到的是原始二進位資料,例如:
0xE6 0xB8 0xAC 0xE8 0xA9 0xA6 ...
──────────────────────────────
│ (需要文字編碼解碼)
▼
InputStreamReader
(位元組流 → 字元流)
──────────────────────────────
把 byte[] 依指定編碼 (UTF-8/Big5...)
解碼成 Java char (UTF-16)
例如:
'測' '試' ...
──────────────────────────────
│ (字元流)
▼
BufferedReader
(加緩衝 + 便利方法)
──────────────────────────────
提供 readLine(),一次讀取整行文字
讓程式處理更方便
──────────────────────────────
│
▼
[Java String]
參考資料
https://hackmd.io/s/tutorials-tw
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/package-summary.html
https://docs.oracle.com/en/java/javase/20/migrate/preparing-migration.html?utm_source=chatgpt.com