java字符流解析_Java IO(四):字符流详解
一、字符流
字節(jié)流提供了處理任何類型輸入/輸出操作的功能(因為對于計算機而言,一切都是0和1,只需把數(shù)據(jù)以字節(jié)形式表示就夠了),但它們不可以直接操作Unicode字符,因為一個Unicode字符占用2個字節(jié),而字節(jié)流一次只能操作一個字節(jié)。既然Java的口號就是"一次編寫、處處運行",那么包含直接的字符輸入/輸出的支持是必要的。因此就有一些字符輸入/輸出流,之前已經(jīng)說明過了,字符流頂層是Reader和Writer這兩個抽象類,因此就從這里開始本文。
二、Reader
Reader是定義Java的字符輸入流的抽象類,該類的所有方法在出錯的情況下都將引發(fā)IOException。Reader類中有這些方法:
方 ? ?法
作 ? ?用
abstract void close()
關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源
void mark(int readAheadLimit)
標記流中的當前位置
boolean markSupported()
判斷此流是否支持mark()操作
int read()
從文件中讀取單個字符
int read(char[] cbuf)
從文件中讀取字符到cbuf
abstract int read(char[] cbuf, int off, int len)
將文件中的字符讀入cbuf數(shù)組,從off位置開始,讀取len個字符。三個read方法在字符可用、發(fā)生I/O異常或者已經(jīng)到達流的末尾前,此方法會一直阻塞
int read(CharBuffer target)
試圖將文件中的字符讀入指定的字符緩沖區(qū)
boolean ready()
判斷是否準備讀取此流
voi reset()
重置該流
long skip(long n)
跳過n個字符
三、Writer
Writer是定義字符輸出流的抽象類,所有該類的方法都返回一個void值并在出錯的條件下引發(fā)IOException。Writer類中的方法有:
方 ? ?法
作 ? ?用
Writer append(char c)
將制定字符添加到此writer
Writer append(CharSequence csq)
將制定字符序列添加到此writer
Writer append(CharSequence csq, int start, int end)
將指定字符序列的子序列添加到此writer.Appendable
abstract void close()
關(guān)閉此流,但要先flush()它
abstract void flush()
刷新該流的緩沖
void write(char[] cbuf)
將cbuf中的內(nèi)容寫入文件
abstract void write(char[] cbuf, int off, int len)
將字符數(shù)組cbuf中從off開始的len個字節(jié)寫入文件
void write(int c)
寫入單個字符到文件中
void write(String str)
寫入字符串到文件中
void write(String str, int off, int len)
寫入str從off位置開始的len個字符到文件中
四、FileReader和FileWriter
FileReader類創(chuàng)建了一個可以讀取文件內(nèi)容的Reader類,最常用的構(gòu)造方法是:
1、FileReader(String fileName)
2、FileReader(File file)
FileWriter創(chuàng)建了一個可以寫文件的Writer類,最常用的構(gòu)造方法是:
1、FileWriter(String fileName)
2、FileWriter(String fileName, boolean append)
3、FileWriter(File file)
其中第二個構(gòu)造方法,如果append為true,那么輸出是追加到文件結(jié)尾的。FileWriter類的創(chuàng)建不依賴文件是否存在,在創(chuàng)建文件之前,FileWriter將在創(chuàng)建對象時打開它來作為輸出。如果試圖打開一個只讀文件,那么將引發(fā)一個IOException。看一下FileWriter和FileReader的使用,現(xiàn)在D盤FIles文件夾下沒有"writer.txt":
packagecom.demo.io;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.Reader;importjava.io.Writer;public classFileReaderWriterTest {public static void main(String[] args) throwsException{
File file= new File("D:/Files/writer.txt");
Writer out= newFileWriter(file);//聲明一個String類型對象
String str = "Hello World!!!";
out.write(str);
out.close();//讀文件操作
Reader in = newFileReader(file);//開辟一個空間用于接收文件讀進來的數(shù)據(jù)
char c0[] = new char[1024];int i = 0;//將c0的引用傳遞到read()方法之中,同時此方法返回讀入數(shù)據(jù)的個數(shù)
i =in.read(c0);
in.close();if(i==-1){
System.out.println("文件中無數(shù)據(jù)");
}else{
System.out.println(new String(c0,0,i));
}
}
}
利用FileWriter和FileReader進行了一次的讀寫操作,先看一下D盤Files文件夾下是否有"writer.txt",假如有"writer.txt"那"writer.txt"中又是什么:
看來利用FileWriter寫入一個內(nèi)存中的字符串到文件中是成功了,那么利用利用FileReader讀入文件中的內(nèi)容到內(nèi)存呢,看一下運行結(jié)果:
Hello World!!!
打印結(jié)果和文件中的內(nèi)容一致,說明FileReader的操作也成功。
這就是FileWriter和FileReader的使用,和FileOutputStream和FileInputStream的使用差不多,不過實際操作中一般不會用FileWriter和FileReader,這將在下一篇文章進行講解。
總結(jié)
以上是生活随笔為你收集整理的java字符流解析_Java IO(四):字符流详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发基础总结_Java并发编程笔
- 下一篇: java 车站分级问题_【NOIP201