今天不想跑,所以才去跑|

凉白茶

园龄:2年4个月粉丝:19关注:7

2023-06-04 20:31阅读: 33评论: 0推荐: 0

IO流 p4 FileReader 和 FileWriter

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:

    1. new String(char[]):将char[]转换成String
    2. 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("程序结束");
    }
    }

本文作者:凉白茶

本文链接:https://www.cnblogs.com/zh-Note/p/17455293.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   凉白茶  阅读(33)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.