(最近剛來到簡書平臺殊霞,以前在CSDN上寫的一些東西,也在逐漸的移到這兒來帅掘,有些篇幅是很早的時候?qū)懴碌奈海虼丝赡軙吹揭恍﹥?nèi)容雜亂的文章,對此深感抱歉修档,以下為正文)
正文
本篇講述的Java IO包中的FileReader和FileWriter類碧绞。它們的功能與前面講過的FileInputStream和FileOutputStream類基本類似,只是前者是基于字符流后者是基于字節(jié)流吱窝,它們都能從文件中讀取或者寫入數(shù)據(jù)讥邻,下面先貼上源碼進行簡單的分析。
FileReader.java
package java.io;
public class FileReader extends InputStreamReader {
/**
* 一個帶一個參數(shù)的構(gòu)造方法院峡,傳入的參數(shù)為一個String類型數(shù)據(jù)兴使,是想要打開文件的路徑名。內(nèi)部實質(zhì)是調(diào)用InputStreamReader對應的構(gòu)造函數(shù)撕予。
*/
public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
}
/**
* 一個帶一個參數(shù)的構(gòu)造方法鲫惶,傳入的參數(shù)為一個File類型數(shù)據(jù),為想要打開文件的File對象实抡。內(nèi)部實質(zhì)是調(diào)用InputStreamReader對應的構(gòu)造函數(shù)欠母。
*/
public FileReader(File file) throws FileNotFoundException {
super(new FileInputStream(file));
}
/**
* 一個帶一個參數(shù)的構(gòu)造方法欢策,傳入的參數(shù)為一個FilerDsecriptor對象,為想要打開文件的文件描述符赏淌。內(nèi)部實質(zhì)是調(diào)用InputStreamReader對應的構(gòu)
* 造函數(shù)踩寇。
*/
public FileReader(FileDescriptor fd) {
super(new FileInputStream(fd));
}
}
FileWriter.java
package java.io;
public class FileWriter extends OutputStreamWriter {
/**
* 一個帶一個參數(shù)的構(gòu)造方法,傳入的參數(shù)為一個String類型數(shù)據(jù)六水,為想要寫入的文件路徑名俺孙。內(nèi)部實質(zhì)是調(diào)用OutputStreamWriter對應的構(gòu)造方法。
*/
public FileWriter(String fileName) throws IOException {
super(new FileOutputStream(fileName));
}
/**
* 一個帶兩個參數(shù)的構(gòu)造方法掷贾,第一個參數(shù)為一個String類型參數(shù)睛榄,表示要寫入的文件路徑名,第二個參數(shù)為一個boolean類型數(shù)據(jù)想帅,表示打開寫入文
* 件時是以覆蓋的模式向文件中寫入數(shù)據(jù)還是以追加的方式向文件寫入文件(true是追加场靴,false為覆蓋)。內(nèi)部實質(zhì)是調(diào)用OutputSteramWriter對應
* 的構(gòu)造函數(shù)港准。
*/
public FileWriter(String fileName, boolean append) throws IOException {
super(new FileOutputStream(fileName, append));
}
/**
* 一個帶一個參數(shù)的構(gòu)造方法旨剥,傳入的參數(shù)為要寫入文件的File對象。內(nèi)部實質(zhì)是調(diào)用OuputStreamWriter對應的構(gòu)造函數(shù)浅缸。
*/
public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}
/**
* 一個帶兩個參數(shù)的構(gòu)造方法轨帜,第一個參數(shù)為要寫入文件的File對象,第二個參數(shù)是一個boolean類型數(shù)據(jù)衩椒,表示打開寫入文件時是以覆蓋的模式向文
* 件中寫入數(shù)據(jù)還是以追加的方式向文件中寫入文件(true是追加蚌父,false為覆蓋)。內(nèi)部實質(zhì)是調(diào)用OututStreamWriter對應的構(gòu)造函數(shù)烟具。
*/
public FileWriter(File file, boolean append) throws IOException {
super(new FileOutputStream(file, append));
}
/**
* 一個帶一個參數(shù)的構(gòu)造方法梢什,傳入的參數(shù)為要打開文件的文件描述符對象。內(nèi)部實質(zhì)是調(diào)用OutputStream對應的構(gòu)造函數(shù)朝聋。
*/
public FileWriter(FileDescriptor fd) {
super(new FileOutputStream(fd));
}
}
通過對源碼的簡單學習,我們可以看出FileReader和FileWriter中并沒有實現(xiàn)一些特殊的讀寫方法囤躁,甚至于它們的源碼中只包含了不同的構(gòu)造方法冀痕,這表明了它們的讀寫方法都是依賴于FileInputStream/FileOutputStream來實現(xiàn)的,F(xiàn)ileReader/FileWriter更多的只是起到將字節(jié)流轉(zhuǎn)化成字符流的工作狸演。
下面通過一個簡單的小例子來展示這兩個類的使用方法:
package FileInputOutput;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileIOTest1 {
public static void main(String[] args) {
char[] buffer = new char[1024];
try (FileReader fr = new FileReader(new File("./src/file/test.txt"));
FileWriter fw = new FileWriter(new File(
"./src/file/testcopy3.txt"))) {
int len;
while ((len = fr.read(buffer)) != -1) {
fw.write(buffer,0,len);
}
System.out.println("復制完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
從示例代碼中可以看出言蛇,F(xiàn)ileReader/FileWriter跟前面講的FileInputStream/FilerOutputStream的使用方法基本完全一致,位移的區(qū)別就是提供的緩存數(shù)組前者是字符數(shù)組后者是字節(jié)數(shù)組宵距。
以上為本篇的全部內(nèi)容腊尚。