欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的字符流FileReader與FileWriter詳解

 更新時(shí)間:2023年10月16日 09:56:35   作者:墨辰JC  
這篇文章主要介紹了Java中的字符流FileReader與FileWriter詳解,在Java中,使用Unicode約定存儲(chǔ)字符,字符流自動(dòng)允許我們逐字符讀/寫(xiě)數(shù)據(jù),有助于執(zhí)行16位Unicode的輸入和輸出,它是以reader和writer結(jié)尾的,需要的朋友可以參考下

概念

在Java中,使用Unicode約定存儲(chǔ)字符。字符流自動(dòng)允許我們逐字符讀/寫(xiě)數(shù)據(jù),有助于執(zhí)行16位Unicode的輸入和輸出;它是以reader和writer結(jié)尾的。

在內(nèi)部,F(xiàn)ileReader使用FileInputStream;

同樣,F(xiàn)ileWrite使用FileOutputStream,字符流采用Unicode編碼。

FileReader字符輸入流

Reader :字符輸入流,用于讀取字符流的抽象超類(lèi)。

FileReader類(lèi)從InputStreamReader類(lèi)繼承而來(lái)。和文件相關(guān)的字符輸入流,可用于讀取文件數(shù)據(jù)。創(chuàng)建對(duì)象的時(shí)候,如果指定的文件不存在,將拋出異常。

在這里插入圖片描述

相關(guān)方法和構(gòu)造器

FileReader提供了三個(gè)構(gòu)造器,用于實(shí)例化FileReader對(duì)象,根據(jù)不同的場(chǎng)景進(jìn)行選擇

在這里插入圖片描述

  • read():每次讀取單個(gè)字符,返回該字符,如果到文件末尾返回-1
public int read();
  • read(char[]):批量讀取多個(gè)字符到數(shù)組,返回讀取到的字符數(shù),如果到文件末尾返回-1
public int read(char[] cbuf);

演示示例

使用FileReader從E盤(pán)下的hello.txt文本讀取內(nèi)容,并顯示

  • read():?jiǎn)蝹€(gè)字符讀取文件(返回實(shí)際讀取到的字符數(shù))
import org.junit.jupiter.api.Test;
import java.io.FileReader;
import java.io.IOException;

@Test
public void readFile01(){
    String filePath = "E:\\test.txt";
    FileReader fileReader = null;//創(chuàng)建FileReader對(duì)象
    int data;
    try {
        fileReader= new FileReader(filePath);
        //循環(huán)讀取
        while ((data = fileReader.read())!=-1){
            System.out.print((char) data);
        }
    } catch (IOException e) {
        e.getMessage();
    }finally {
        if (fileReader!=null){
            try {
                fileReader.close();//釋放內(nèi)存
            } catch (IOException e) {
                e.getMessage();
            }
        }
    }
}
  • read(Char[] cbuf) 使用字符數(shù)組讀取文件 這里使用了String的構(gòu)造器用于將buf轉(zhuǎn)換為字符串

在這里插入圖片描述

@Test
public void readFile02() {
    String filePath = "E:\\test.txt";
    FileReader fileReader = null;//創(chuàng)建FileReader對(duì)象
    int readLen = 0;
    char[] buf = new char[8];
    try {
        fileReader = new FileReader(filePath);
        //
        while ((readLen = fileReader.read(buf)) != -1) {
            System.out.print(new String(buf, 0, readLen));
        }
    } catch (IOException e) {
        e.getMessage();
    } finally {
        if (fileReader != null) {
            try {
                fileReader.close();//釋放內(nèi)存
            } catch (IOException e) {
                e.getMessage();
            }
        }
    }
}

執(zhí)行完畢之后,會(huì)讀取到文本中相應(yīng)的內(nèi)容!

FileWriter字符輸出流

FileWriter 類(lèi)從 OutputStreamWriter 類(lèi)繼承而來(lái)。該類(lèi)按字符向流中寫(xiě)入數(shù)據(jù)。與FileOutputStream基本類(lèi)似,只是前者是基于字符流后者是基于字節(jié)流。

在這里插入圖片描述

相關(guān)方法和構(gòu)造器

FileWriter提供了五個(gè)構(gòu)造器,用于實(shí)例化FileWriter對(duì)象,根據(jù)不同的場(chǎng)景進(jìn)行選擇

在這里插入圖片描述

  • FileWriter(File file, boolean append);此構(gòu)造器為追加模式,當(dāng)append為true時(shí)追加到文件的末尾,否則覆蓋
  • public void write(int c); 寫(xiě)入單個(gè)字符
  • public void write(char[] cbuf); 寫(xiě)入指定數(shù)組
  • public void write(char[] cbuf, int off, int len); 寫(xiě)入指定數(shù)組指定的部分
  • public void write(String str); 寫(xiě)入整個(gè)字符串
  • public void write(String str, int off, int len); 寫(xiě)入字符串的指定部分

注意:FileWriter使用后,必須關(guān)閉(close)或刷新(flush),否則寫(xiě)入不到指定的文件(還在內(nèi)存里面)!

演示示例(使用的是追加構(gòu)造器)

將文本內(nèi)容輸出到E盤(pán)的test.txt文件 這里使用了Stirng類(lèi)中的toCharArray方法:將字符串轉(zhuǎn)換成字符數(shù)組

在這里插入圖片描述

import org.junit.jupiter.api.Test;
import java.io.FileWriter;
import java.io.IOException;

@Test
public void WriteFile02() {
    String filePath = "E:\\test.txt";//操作的文件路徑
    //創(chuàng)建FileWrite對(duì)象
    FileWriter fileWriter = null;
    char[] chars = {'a', 'b', 'c'};
    try {
        fileWriter = new FileWriter(filePath, true);
        fileWriter.write('a');//寫(xiě)入單個(gè)字符
        fileWriter.write(chars);//寫(xiě)入指定數(shù)組
        fileWriter.write("hello,world".toCharArray(), 0, 5); //寫(xiě)入字符數(shù)組的指定部分 寫(xiě)入hello
        fileWriter.write("Java");//寫(xiě)入整個(gè)字符串
        fileWriter.write("你好,世界",0,2);//寫(xiě)入字符串的指定部分
    } catch (IOException e) {
        e.getMessage();//輸出異常l
    } finally {
        try {
            fileWriter.close();//釋放資源
        } catch (IOException e) {
            e.getMessage();
        }
    }
}

此時(shí),上述代碼執(zhí)行之后,test.txt的內(nèi)容變成:aabchelloJava你好

在數(shù)據(jù)量大的情況下,可以使用循環(huán)操作!

為什么用完不close或flush,會(huì)寫(xiě)入不到數(shù)據(jù)?

當(dāng)我們?cè)赾lose方法處進(jìn)行斷點(diǎn)進(jìn)行調(diào)試的時(shí)候,會(huì)發(fā)現(xiàn)FileWriter真正寫(xiě)入數(shù)據(jù)的時(shí)候,是在close方法中!

在這里插入圖片描述

一直下一步,真正添加數(shù)據(jù)是在這里

在這里插入圖片描述

flush(刷新):方法同理,也會(huì)追加到這里

到此這篇關(guān)于Java中的字符流FileReader與FileWriter詳解的文章就介紹到這了,更多相關(guān)Java的FileWriter和FileReader內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java synchronized最細(xì)講解

    Java synchronized最細(xì)講解

    synchronized是Java語(yǔ)言的關(guān)鍵字,當(dāng)它用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線(xiàn)程執(zhí)行該段代碼。本文給大家介紹java中 synchronized的用法,對(duì)本文感興趣的朋友一起看看吧
    2021-09-09
  • Spring基于AspectJ的AOP開(kāi)發(fā)案例解析

    Spring基于AspectJ的AOP開(kāi)發(fā)案例解析

    這篇文章主要介紹了Spring的基于AspectJ的AOP開(kāi)發(fā),AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • SpringBoot接口請(qǐng)求入?yún)⒑统鰠⒃鰪?qiáng)的五種方法

    SpringBoot接口請(qǐng)求入?yún)⒑统鰠⒃鰪?qiáng)的五種方法

    這篇文章主要介紹了SpringBoot接口請(qǐng)求入?yún)⒑统鰠⒃鰪?qiáng)的五種方法,使用`@JsonSerialize`和`@JsonDeserialize`注解,全局配置Jackson的`ObjectMapper`,使用`@ControllerAdvice`配合`@InitBinder`,自定義HttpMessageConverter和使用AOP進(jìn)行切面編程,需要的朋友可以參考下
    2024-07-07
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):棧

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):棧

    這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛(ài)好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-07-07
  • Java使用toString方法展示枚舉字段信息

    Java使用toString方法展示枚舉字段信息

    這篇文章主要為大家詳細(xì)介紹了如何在Java中通過(guò)重寫(xiě)枚舉的toString方法來(lái)展示枚舉實(shí)例的字段信息,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Java中EasyPoi多sheet導(dǎo)出功能實(shí)現(xiàn)

    Java中EasyPoi多sheet導(dǎo)出功能實(shí)現(xiàn)

    這篇文章主要介紹了Java中EasyPoi多sheet導(dǎo)出功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析

    JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析

    當(dāng)產(chǎn)生異常后,并在異常處理器中進(jìn)行執(zhí)行之后,程序會(huì)是如何的一種狀態(tài),是終止還是繼續(xù)執(zhí)行處理之后的代碼呢,下面這篇文章主要給大家介紹了關(guān)于JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Java工程mybatis實(shí)現(xiàn)多表查詢(xún)過(guò)程詳解

    Java工程mybatis實(shí)現(xiàn)多表查詢(xún)過(guò)程詳解

    這篇文章主要介紹了Java工程mybatis實(shí)現(xiàn)多表查詢(xún)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java中申請(qǐng)不定長(zhǎng)度數(shù)組ArrayList的方法

    java中申請(qǐng)不定長(zhǎng)度數(shù)組ArrayList的方法

    今天小編就為大家分享一篇java中申請(qǐng)不定長(zhǎng)度數(shù)組ArrayList的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Quartz高可用定時(shí)任務(wù)的快速上手指南

    Quartz高可用定時(shí)任務(wù)的快速上手指南

    Quartz的分布式策略就是一種以數(shù)據(jù)庫(kù)作為邊界資源的并發(fā)策略,每個(gè)節(jié)點(diǎn)都遵守相同的操作規(guī)范,使得對(duì)數(shù)據(jù)庫(kù)的操作可以串行執(zhí)行,而不同名稱(chēng)的調(diào)度器又可以互不影響的并行運(yùn)行,下面這篇文章主要介紹了Quartz高可用定時(shí)任務(wù)快速上手的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論