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 = https://www.cnblogs.com/zh-Note/archive/2023/06/04/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("程式結束"); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554263.html
標籤:其他
上一篇:【單元測驗】Spring Data JPA + H2 測驗DAO層
下一篇:返回列表