Java IO: 其他字元流(下)
本小節會簡要概括Java IO中的PushbackReader,LineNumberReader,StreamTokenizer,PrintWriter,StringReader,StringWriter。
PushbackReader
PushbackReader與PushbackInputStream類似,唯一不同的是PushbackReader處理字元,PushbackInputStream處理位元組。程式碼如下:
PushbackReader reader
=
new
PushbackReader
(
new
FileReader
(
"c:\\data\\input.txt"
)
)
;
int data
= reader
.
read
(
)
;
reader
.
unread
(data
)
;
同樣可以設定緩衝區大小,程式碼如下:
PushbackReader reader
=
new
PushbackReader
(
new
FileReader
(
"c:\\data\\input.txt"
)
,
8
)
;
LineNumberReader
LineNumberReader是記錄了已讀取資料行號的BufferedReader。預設情況下,行號從0開始,當LineNumberReader讀取到行終止符時,行號會遞增(譯者注:換行\n,回車\r,或者換行回車\n\r都是行終止符)。
你可以通過getLineNumber()方法獲取當前行號,通過setLineNumber()方法設定當前行數(譯者注:setLineNumber()僅僅改變LineNumberReader內的記錄行號的變數值,不會改變當前流的讀取位置。流的讀取依然是順序進行,意味著你不能通過setLineNumber()實現流的跳躍讀取)。程式碼如下:
LineNumberReader reader
=
new
LineNumberReader
(
new
FileReader
(
"c:\\data\\input.txt"
)
)
;
int data
= reader
.
read
(
)
;
while
(data
!=
-
1
)
{
char dataChar
=
(char
) data
;
data
= reader
.
read
(
)
;
int lineNumber
= reader
.
getLineNumber
(
)
;
}
如果解析的文字有錯誤,LineNumberReader可以很方便地定位問題。當你把錯誤報告給使用者時,如果能夠同時把出錯的行號提供給使用者,使用者就能迅速發現並且解決問題。
StreamTokenizer
StreamTokenizer(譯者注:請注意不是StringTokenizer)可以把輸入流(譯者注:InputStream和Reader。通過InputStream構造StreamTokenizer的建構函式已經在JDK1.1版本過時,推薦將InputStream轉化成Reader,再利用此Reader構造StringTokenizer)分解成一系列符號。比如,句子”Mary had a little lamb”的每個單詞都是一個單獨的符號。
當你解析檔案或者計算機語言時,為了進一步的處理,需要將解析的資料分解成符號。通常這個過程也稱作分詞。
通過迴圈呼叫nextToken()可以遍歷底層輸入流的所有符號。在每次呼叫nextToken()之後,StreamTokenizer有一些變數可以幫助我們獲取讀取到的符號的型別和值。這些變數是:
ttype 讀取到的符號的型別(字元,數字,或者行結尾符)
sval 如果讀取到的符號是字串型別,該變數的值就是讀取到的字串的值
nval 如果讀取到的符號是數字型別,該變數的值就是讀取到的數字的值
程式碼如下:
//java學習交流:737251827 進入可領取學習資源及對十年開發經驗大佬提問,免費解答!
StreamTokenizer tokenizer
=
new
StreamTokenizer
(
new
StringReader
(
"Mary had 1 little lamb..."
)
)
;
while
(tokenizer
.
nextToken
(
)
!= StreamTokenizer
.
TT_EOF
)
{
if
(tokenizer
.ttype
== StreamTokenizer
.
TT_WORD
)
{
System
.out
.
println
(tokenizer
.sval
)
;
}
else
if
(tokenizer
.ttype
== StreamTokenizer
.
TT_NUMBER
)
{
System
.out
.
println
(tokenizer
.nval
)
;
}
else
if
(tokenizer
.ttype
== StreamTokenizer
.
TT_EOL
)
{
System
.out
.
println
(
)
;
}
}
譯者注:TT_EOF表示流末尾,TT_EOL表示行末尾。
StreamTokenizer可以識別標示符,數字,引用的字串,和多種註釋型別。你也可以指定何種字元解釋成空格、註釋的開始以及結束等。在StreamTokenizer開始解析之前,所有的功能都可以進行配置。請查閱官方文件獲取更多資訊。
PrintWriter
與PrintStream類似,PrintWriter可以把格式化後的資料寫入到底層writer中。由於內容相似,不再贅述。
值得一提的是,PrintWriter有更多種建構函式供使用者選擇,除了可以輸出到檔案、Writer以外,還可以輸出到OutputStream中(譯者注:PrintStream只能把資料輸出到檔案和OutputStream)。
StringReader
StringReader能夠將原始字串轉換成Reader,程式碼如下:
Reader reader
=
new
StringReader
(
"input string..."
)
;
int data
= reader
.
read
(
)
;
while
(data
!=
-
1
)
{
//do something with data...
doSomethingWithData
(data
)
;
data
= reader
.
read
(
)
;
}
reader
.
close
(
)
;
StringWriter
StringWriter能夠以字串的形式從Writer中獲取寫入到其中資料,程式碼如下:
StringWriter writer
=
new
StringWriter
(
)
;
//write characters to writer.
String data
= writer
.
toString
(
)
;
StringBuffer dataBuffer
= writer
.
getBuffer
(
)
;
toString()方法能夠獲取StringWriter中的字串資料。
getBuffer()方法能夠獲取StringWriter內部構造字串時所使用的StringBuffer物件。 作者:那年春天莓下雪 出處:bilibili
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2844440/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java IO5:字元流Java字元
- IO 字元流字元
- Java IO流字元流簡介及基本使用Java字元
- java的IO操作:位元組流與字元流操作Java字元
- Java基礎(八)——IO流1_位元組流、字元流Java字元
- Java位元組流和字元流,是時候總結一下IO流了Java字元
- Java提高篇(二):IO位元組流、字元流和處理流Java字元
- Java程式設計基礎23——IO(其他流)&PropertiesJava程式設計
- IO流之 檔案操作字元流字元
- IO流上:概述、字元流、緩衝區(java基礎)字元Java
- IO流 檔案字元流FileReader、FlieWriter字元
- java -IO流Java
- Java IO流Java
- java - IO流Java
- Java IO流Java
- Java IO: 流Java
- Java——IO流Java
- Java IO6:字元流進階及BufferedWriter、BufferedReaderJava字元
- [java IO流]之 IO概述Java
- Java的IO流Java
- Java IO流操作Java
- Java-字元流Java字元
- Java 基於字元的IO Char Based IOJava字元
- 【重學Java】IO流Java
- Java IO流(詳細)Java
- Java筆記-IO流Java筆記
- 學習java io流Java
- Java IO流學習Java
- Java IO流總結Java
- JAVA之精髓IO流Java
- JAVA IO流-小白版Java
- Java之IO流基礎流物件Java物件
- Java IO7:管道流、物件流Java物件
- Java IO4:字元編碼Java字元
- java入門(字元流、位元組流)Java字元
- java進階(33)--IO流Java
- java IO流學習分享Java
- Java之IO轉換流Java