图片流写出 并带数据_IO流阶段---字符流
字符流
當使用字節流讀取文本文件時, 可能會有一個小問題, 就是當遇到中文字符時, 可能不會顯示完整的字符, 那是因為一個中文字符可能占據多個字節存儲, 所以Java提供一些字符流類, 以字符為單位讀寫數據, 專門用于處理文本文件.
1. 字符輸入流 ( Reader )
java.io.Reader抽象類是表示用于讀取字符流的所有類的超類, 可以讀取字符信息到內存中, 它定義了字符輸入流的基本共性功能方法. 如果要使用, 需要使用它的子類, 常用的子類是FileReader
| 修飾符 | 返回值 | 方法名 | 參數列表 | 作用 | | ------ | ------ | ------- | ------------ | ----------------------------------------------------- | | public | void | close | ( ) | 關閉此流并釋放與此流相關聯的任何系統資源 | | public | int | read | ( ) | 從輸入流讀取一個字符 | | public | int | read | ( char[] c ) | 從輸入流中讀取一些字符,并將它們存儲到字符數組 cbuf中 |
2. FileReader類
java.io.FileReader類是讀取字符文件的便利類, 構造是使用系統默認的字符編碼和默認字節緩沖區.
2.1 構造方法
| 構造方法 | 作用 | | ----------------------------- | ------------------------------------------------------ | | FileReader(File file) | 參數要傳遞File類型的文件,表示從該文件中讀取數據 | | FileReader(String fileName) | 參數要傳遞字符串類型的文件路徑,表示從該文件中讀取數據 |
當創建一個流對象時, 必須傳入一個文件路徑, 類似于FileInputStream.
2.2 讀取字符數據
| 修飾符 | 返回值 | 方法名 | 參數列表 | 作用 | | ------ | ------ | ------ | ------------ | ------------------------------------------------------------ | | public | void | read | ( ) | 讀取一個字符并返回, 如果已經讀取結束, 返回值是-1 | | public | int | read | ( char[] c ) | 將數據讀取到字符數組中,并返回讀取到的字符個數,如果已經讀取結束, 返回值是-1 |
字符輸入流的使用步驟 :
字符輸入流一次讀取一個字節的方法 :
public class Demo01Reader {public static void main(String[] args) throws IOException {//1. 創建字符輸入流對象Reader r = new FileReader("day11source03.txt");//2. 調用read方法,讀取數據。//int read(): 讀取一個字符并返回, 如果已經讀取結束, 返回值是-1.//定義變量i,用來接收讀取到的字符。int i;//開始循環讀取while ((i = r.read()) != -1) {//如果條件成立表示讀取到了數據,讀取到的數據保存在了變量i中System.out.print((char)i);}//釋放資源r.close();} }字符輸入流一次讀取一個字符數組的方法 :
int read (char[] c) : 將數據讀取到字符數組中, 并返回讀取到的字符個數, 如果已經讀取結束, 返回值是-1
public class Demo02Reader {public static void main(String[] args) throws IOException {//創建字符輸入流對象Reader r = new FileReader("day11source03.txt");//使用一次讀取一個字符數組的方式讀取數據。//int read(char[] cbuf): 將數據讀取到字符數組中char[] cArr = new char[2];//定義變量len,用來接收讀取到的字符個數int len;//開始循環讀取while ((len = r.read(cArr)) != -1) {//如果條件成立表示讀取到了數據,讀取到的數據保存在了cArr這個數組中,變量len中保存的是讀取到的字符個數。//將字符數組的一部分轉成字符串輸出。讀取到了幾個內容,就轉幾個。System.out.print(new String(cArr, 0, len));}//釋放資源r.close();} }3. 字符輸出流 ( Writer )
java.io.Writer抽象類是所有字符輸出流的頂層父類, 可以按照字符為單位寫數據, 可以將Java程序中的數據寫到文件中, 它定義了字節輸出流的基本共性方法. 常用的子類是FileWriter.
| 修飾符 | 返回值 | 方法名 | 參數列表 | 作用 | | ---------------- | ------ | ------- | -------------------------------- | ------------------------------------------------------------ | | public abstract | void | close | ( ) | 關閉此輸出流并釋放與此流相關聯的任何系統資源。 | | public abstract | void | flush | ( char[] c ) | 刷新此輸出流并強制任何緩沖的輸出字符被寫出。 | | public | void | write | ( int c ) | 寫出一個字符 | | public | void | write | ( char[] c ) | 將 b.length字符從指定的字符數組寫出此輸出流 | | public abstract | void | write | (char[] c, int off, int length ) | 從指定的字符數組寫出 len字符,從偏移量 off開始輸出到此輸出流 | | public | void | write | (String str) | 寫出一個字符串 | | public | void | write | (String str, int off, int len) | 向文件中寫字符串的一部分。參數off表示從哪個位置開始寫,參數len表示寫幾個 |
4. FileWriter類
java.io.FileWriter類是寫出字符到文件的便利類, 構造時使用系統默認的字符編碼和默認字節緩沖區.
4.1 構造方法
| 構造方法 | 作用 | | ----------------------------- | -------------------------------------------------------- | | FileWriter(File file) | 參數要傳遞一個File類型的文件,表示向該文件中寫數據 | | FileWriter(String fileName) | 參數要傳遞一個字符串類型的文件路徑,表示向該文件中寫數據 |
當創建一個流對象時, 必須傳入一個文件路徑, 類似于FileOutputStream
4.2 寫出數據
字符輸出流的使用步驟 :
只有字符輸出流必須要勤刷新.
public class Demo01Writer {public static void main(String[] args) throws IOException {//1. 創建字符輸出流對象。Writer w = new FileWriter("day11file01.txt");//2. 調用write方法寫數據w.write("雷猴");//字符輸出流寫數據并沒有將數據直接寫到文件中,而是先寫到了內存緩沖區中。//如果想要把內存緩沖區中的數據放到文件中,那么需要刷新。//3. 刷新w.flush();//4. 關流w.close();} }刷新方法和關閉方法的區別flush():刷新。 流在刷新之后還可以使用。
close():先刷新,然后關閉流。 流在關閉之后就不能使用了。
調用close的時候, 也會先刷新, 再關閉, 但是如果要寫入很多的數據, 那么內存緩沖區就會過載 , 所以需要時不時的清空內存緩沖區, 將數據先寫入文檔內在繼續.
5種字符輸出的方法 :
public class Demo03Writer {public static void main(String[] args) throws IOException {//創建字符輸出流對象Writer w = new FileWriter("day11file03.txt");//調用write方法寫數據。//void write(String str): 向文件中寫一個字符串//w.write("hello");//void write(String str, int off, int len): 向文件中寫字符串的一部分//w.write("hello", 1, 3);//將hello的一部分寫到文件中,從索引為1的位置開始寫,寫3個//void write(int c):向文件中寫一個字符//w.write(100);//d 會查詢ASCII碼表寫入對應的字符。//w.write('a');//w.write('中');//void write(char[] cbuf): 向文件中寫一個字符數組。//char[] cArr = {'h', 'e', 'l', 'l', 'o'};//w.write(cArr);//void write(char[] cbuf, int off, int len): 向文件中寫字符數組的一部分char[] cArr = {'h', 'e', 'l', 'l', 'o'};w.write(cArr, 1, 3);//表示將cArr的一部分寫到文件中,從索引為1的位置開始寫,寫3個//刷新w.flush();//關流w.close();} }總結
以上是生活随笔為你收集整理的图片流写出 并带数据_IO流阶段---字符流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python使用opencv_教你快速使
- 下一篇: php导出csv文件,可导出前导0实例