# FileReader 和 FileWriter ### 一、 FileReader 和 File Writer 介紹 FileReader 和 FileWriter 是字元流,即按照字元來操作 io ### 二、 FileReader 相關方法 ![](https://img2023.cnblo ...
FileReader 和 FileWriter
一、 FileReader 和 File Writer 介紹
FileReader 和 FileWriter 是字元流,即按照字元來操作 io
二、 FileReader 相關方法
- 構造方法摘要
Constructor and Description |
---|
FileReader(File file) 創建一個新的 FileReader ,給出 File 讀取。 |
FileReader(String fileName) 創建一個新的 FileReader ,給定要讀取的文件的名稱。 |
FileReader(FileDescriptor fd) 創建一個新的 FileReader ,給定 FileDescriptor 讀取。 |
- 相關方法摘要
Modifier and Type | Method and Description |
---|---|
int |
read() 每次讀取單個字元,返回該字元,如過達到文件末尾返回-1 |
int |
read(char[]) 批量讀取多個字元到數組中,返回讀取到的字元數,如過達到文件末尾返回-1 |
-
相關API:
- new String(char[]):將char[]轉換成String
- new String(char[], off, len):將char[]的指定部分轉換成String
-
代碼演示:
import org.junit.jupiter.api.Test; import java.io.FileReader; import java.io.IOException; /** * @author * @version 1.0 */ public class FileReader_ { public static void main(String[] args) { } /** * 單個字元讀取 */ @Test public void fileReader01(){ String filePath = "e:\\story.txt"; //創建FileReader對象 FileReader fileReader = null; int data = 0; try { fileReader = new FileReader(filePath); //迴圈讀取 while((data = fileReader.read()) != -1){ System.out.print((char)data); } } catch (IOException e) { e.printStackTrace(); }finally { try { if(fileReader != null) fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 字元數組讀取 */ @Test public void fileReader02(){ String filePath = "e:\\story.txt"; FileReader fileReader = null; int readLen = 0; char[] buf = new char[8]; try { //創建FileReader對象 fileReader = new FileReader(filePath); //迴圈讀取 while((readLen = fileReader.read(buf)) != -1){ System.out.print((new String(buf, 0, readLen))); } } catch (IOException e) { e.printStackTrace(); }finally { try { if(fileReader != null) fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
三、 FileWriter 相關方法
- 構造方法摘要
Constructor and Description |
---|
FileWriter(File file) 給一個File對象構造一個FileWriter對象。 |
FileWriter(File file, boolean append) 給一個File對象構造一個FileWriter對象。 |
FileWriter(String fileName) 構造一個給定文件名的FileWriter對象。 |
FileWriter(String fileName, boolean append) 構造一個FileWriter對象,給出一個帶有布爾值的文件名,表示是否附加寫入的數據。 |
FileWriter(FileDescriptor fd) 構造與文件描述符關聯的FileWriter對象。 |
- 相關方法摘要
Modifier and Type | Method and Description |
---|---|
void |
writer() 寫入單個字元 |
void |
writer(char[]) 寫入指定數組 |
void |
writer(char[], int off, int len) 寫入指定數組的指定部分 |
void |
writer(String str) 寫入整個字元串 |
void |
writer(String str, int off, int len)) 寫入字元串的指定部分 |
-
相關API:String類:toCharArray():將String轉換成char[]
-
註意:FileWriter使用後,必須要關閉(close)或刷新(flush),否則寫入不到指定的文件。在Java中使用帶有緩衝的流時進行文件寫入時,數據首先被緩存在記憶體中。當緩衝區滿或者close()或flush()方法被調用時,緩衝區中的數據才會被真正地寫入到文件中。如果沒有關閉流或者flush緩衝區,緩衝區中的數據就會一直保留在記憶體中,而不會被寫入到文件中。如果程式突然崩潰或者關閉,這些緩衝的數據將會丟失,這可能會導致數據的不完整或者文件損壞。
-
代碼演示:
import java.io.FileWriter; import java.io.IOException; /** * @author * @version 1.0 */ public class FileWriter_ { public static void main(String[] args) { String filePath = "e:\\note.txt"; FileWriter fileWriter = null; char[] chars = {'a','b','c'}; try { //創建FileWriter對象 fileWriter = new FileWriter(filePath);//預設是覆蓋寫入 //這種構造方法在使用FileWriter時,如果文件不存在,則會自動創建一個新的文件, // 如果文件已經存在,則會直接打開該文件並清空原有內容,從文件的開頭開始寫入新的內容。 //1. writer(int):寫入單個字元 fileWriter.write('H'); //2. writer(char[]):寫入指定數組 fileWriter.write(chars); //3. writer(char[], off, len):寫入指定數組的指定部分 fileWriter.write("中國四大名著".toCharArray(), 0, 3); //4. writer(string):寫入整個字元串 fileWriter.write("豬八戒娶媳婦"); //5.writer(string, off, len):寫入字元串的指定部分 fileWriter.write("三打白骨精",0,2); //在數據量大的情況下可以迴圈操作 } catch (IOException e) { e.printStackTrace(); }finally { //對應FileWriter,一定要關閉流,或者flush才能真正的把數據寫入文件中 //看源碼就知道原因 /* 源碼: private void writeBytes() throws IOException { this.bb.flip(); int var1 = this.bb.limit(); int var2 = this.bb.position(); assert var2 <= var1; int var3 = var2 <= var1 ? var1 - var2 : 0; if (var3 > 0) { if (this.ch != null) { assert this.ch.write(this.bb) == var3 : var3; } else { this.out.write(this.bb.array(), this.bb.arrayOffset() + var2, var3); } } this.bb.clear(); } */ //在Java中使用FileWriter進行文件寫入時,數據首先被緩存在記憶體中。當緩衝區滿或者close()或flush()方法被調用時,緩衝區中的數據才會被真正地寫入到文件中。 // //如果沒有關閉流或者flush緩衝區,緩衝區中的數據就會一直保留在記憶體中, // 而不會被寫入到文件中。如果程式突然崩潰或者關閉,這些緩衝的數據將會丟失, // 這可能會導致數據的不完整或者文件損壞。 try { fileWriter.close(); //關閉文件流,等價於flush() + 關閉 // fileWriter.flush(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("程式結束"); } }