技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2026 iThome 鐵人賽
DAY
23
0
Software Development
從零開始學程式語言:Java 新手修煉記
系列 第
23
篇
Day 23:檔案處理
18th鐵人賽
ling__
2026-10-07 23:56:30
12 瀏覽
分享至
本日學習:
串流 stream
由字元與位元組成
可經由串流從資料來源讀寫資料,也可將資料以字元或位元型式寫到檔案
輸入串流 & 輸出串流
java.io 資料庫處理
字元串流:Reader and Writer 處理,即純文字檔
位元串流:InputStream and OutputStream 處理,即二進位檔
處理方式:先透過檔案相關類別的建構子建立物件 → 利用物件的 write() or read() 函數來讀取或寫入資料 → 處理資料 → close() 關閉串流
檔案的基本處理
函數通常繼承給子類別使用
Reader 類別的函數:
void close():關閉串流
int read():讀取串流中的一個字元
int read(char[] cbuf):從串流讀取資料並放到字元陣列 cbuf 中,並傳回所讀取字元總數
int read(char[] cbuf, int off, int len):從串流讀取資料並放到字元陣列 cbuf 的某個範圍(off:陣列索引值,len:讀取字元數)
long skip(long n):跳過 n 個字元不讀取
Writer() 類別的函數:
void close():關閉串流
abstract void flush():將緩衝區資料寫到檔案裡(寫在 Writer 子類別內)
void write(char[] cbuf):將字元陣列 cbuf 輸出到串流
void write(char[] cbuf, int off, int len):將字元陣列 cbuf 依指定格式輸出到串流(off:陣列索引值,len:讀取字元數)
void write(int c):將單一字元 c 輸入到串流中
void write(String str):將字串 str 輸出到串流中
void write(String str, int off, int len):將字串 str 輸出到串流(off:陣列索引值,len:讀取字元數)
FileReader:
繼承自 InputStreamReader 類別,它的父類別為 Reader 類別
可讀取文字檔
先呼叫 FileReader() 建構子建立 FileReader 類別的物件,再利用它呼叫 read() 函數來讀取檔案,例如:FileReader(String name)
文字文件的編碼要選:ANSI
一格中文字一個字元,換行為兩個字元
FileWriter:
繼承自 OutputStreamWriter 類別,它的父類別為 Writer 類別
將字元型態的資料寫入檔案
先呼叫 FileWriter() 建構子建立 Filewriter 類別的物件,再利用它呼叫 write() 函數來讀取檔案,例如:FileWriter(String filename)、FileWriter(String filename, Boolean a),a 若設為 true,資料會加在原先資料後面
IOEception 例外處理
以上不使用緩衝區處理,因此存取效率較差
利用緩衝區讀寫資料
先將資料放到緩衝區而不是磁碟
會佔一塊記憶體空間
有資料流失風險
讀取資料:BufferedReader 類別
先建立 FilReader 物件,再以它為引數建立 BufferedReader 類別的物件,藉此物件來讀取
建構子:BufferedReader(Reader in)、BufferedReader(Reader in, int size)
函數:
void close():關閉串流
int read():讀取單一字元
int read(char[] cbuf, int off, int len)
long skip(long n):跳過 n 個字元不讀取
String readLine():讀取一行字串
輸出資料:BufferedWriter 類別
先建立 FilWriter 物件,再以它為引數建立 BufferedWriter 類別的物件,藉此物件來讀取
建構子:BufferedWriter(Writer out)、BufferedWriter(Reader out, int size)
函數:
void close():關閉串流
void flush():寫入緩衝區的字元到檔案
void write(char[] cbuf, int off, int len)
void write(String s, int off, int len)
void write(int c):寫入單一字元
void newLine():寫入換行字元
留言
追蹤
檢舉
上一篇
Day 22:類別(10)
下一篇
Day 24:例外處理
系列文
從零開始學程式語言:Java 新手修煉記
共
24
篇
目錄
RSS系列文
訂閱系列文
0
人訂閱
20
Day 20:類別(8)
21
Day 21:類別(9)
22
Day 22:類別(10)
23
Day 23:檔案處理
24
Day 24:例外處理
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
929
組
團體組數
32
組
累計文章數
18473
篇
完賽人數
263
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
17th鐵人賽
14th鐵人賽
18th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
熱門問題
停用網路卡隨機mac 的方式 (Random MAC Addresses for Ethernet Adapters)
我的出發點錯了嗎
excel 檔案損毀的情況
熱門回答
我的出發點錯了嗎
excel 檔案損毀的情況
熱門文章
Claude code 新手番外篇:Claude Code 卡住了?你知道 Claude Status 是什麼嗎?
工程師捍衛自己的權利和權益
Rider 擋下了編譯不過的 AI 生成程式碼,技術上怎麼做到的
JavaScript - Callback Hell
Day 9|跟記憶體陣列說再見:安裝 SQLite 並建立資料表
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}