Io流 (字符流)用法与前面结合理解十分简单

咦? 刚才怎么回事

那好我们再来看一下字符流

对了 再说字符流之前 先做一个小案例来过一下前面的知识

练习:文件的复制

public class Fdemo {
    //复制文件
    public static void main(String[] args) {
        //字节输入
        FileInputStream fi = null;
        //字节输出
        FileOutputStream fo =null;
        String path="D:\\jj\\a2.txt";
        try {
            fi = new FileInputStream(path);
            fo =new FileOutputStream("D:\\jj\\FuZhi.txt");
            //遍历
            int b;
            while ((b=fi.read())!=-1){
                fo.write(b);
              }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //释放资源
        try {
            fi.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fo.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.1 FileWriter: 文件字符输出流:

作用:把内存中的字符数据写入到文件中

构造方法:

FileWriter(File file) 给一个File对象构造一个FileWriter对象。

FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。

文件字符输出流的使用步骤(重点):

​ 1.创建FileWriter对象,构造方法中绑定要写入的数据的目的地

​ 2.使用FileWriter中的方法write,数据写入到内存缓冲区中(字符转换为字节的过程)

​ 3.会把FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中

​ 4.释放资源

/*
* 字符输出流【Writer】
*   void write(int c)          写入单个字符。
    void write(char[] cbuf)    写入字符数组。
    abstract  void write(char[] cbuf, int off, int len)   写入字符数组的某一部分,off数组的开始索引,
*    len写的字符个数。
    void write(String str)     写入字符串。
    void write(String str, int off, int len)   写入字符串的某一部分,off字符串的开始索引,
*    len写的字符个数。
    void flush()   刷新该流的缓冲。
    void close()   关闭此流,但要先刷新它。
* */
public class Fdemo07 {
    //写出字符
    public static void main(String[] args) throws IOException {
        FileWriter fileWriter = null;
        try {
            fileWriter=new FileWriter("D:\\jj\\b.txt");
            fileWriter.write(93);
            fileWriter.write("我喜欢");
            fileWriter.write("雷姆");
        } catch (IOException e) {
            e.printStackTrace();
        }
        /*
        【注意】关闭资源时,与FileOutputStream不同。
        如果不关闭,数据只是保存到缓冲区,并未保存到文件。
        */
        fileWriter.close();
    }
}

字符输出流写数据的其他方法

public class Fdemo08 {
    //写出字符数组
    public static void main(String[] args) {
        FileWriter fileWriter = null;
        try {
            fileWriter=new FileWriter("D:\\jj\\b.txt");
            char[] chars = "都拉都拉都拉都拉都拉都拉".toCharArray();
            fileWriter.write(chars);          //都拉都拉都拉都拉都拉都拉
            fileWriter.write("奥里给");        //直接写字符串
            fileWriter.write(chars,0,2);      //写字符数组的一部分
            fileWriter.write("奥里给",0,2);    //写字符数组的一部分
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.2 文件字符输入流

字符输入流 Reader:是字符输入流的最顶层父类,定义了一些共性的成员方法,是一个抽象类

成员方法:

int read() 读取单个字符并返回

int read(char[] cbuf) 一次读取多个字符,将字符读入数组

void close() 关闭该流并释放与之关联的所有资源

FileReader:文件字符输入流

作用:把硬盘文件中的数据以字符的方式读取到内存中

构造方法:

FileReader(File file) 创建一个新的 FileReader ,给出 File读取。

FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。

​ 参数:读取文件的数据源

​ String fileName: 文件路径

​ File file : 文件

字符输入流的使用步骤:

1.创建FileReader对象,绑定数据源

2.使用FileReader对象中的方法read读取文件

3.释放资源

直接来个王炸

int read() 读取单个文件并返回

public class Fdemo09 {
    //写出字符数组
    public static void main(String[] args) {
        FileReader fileReader = null;
        try {
            fileReader=new FileReader("D:\\jj\\b.txt");
         
           int b=0;
            while ((b=fileReader.read())!=-1){
                System.out.println((char)b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

int read (char[] cbuf) 一次读取多个文件,将字符读入数组

public class Fdemo09 {
    //写出字符数组
    public static void main(String[] args) {
        FileReader fileReader = null;
        try {
            fileReader=new FileReader("D:\\jj\\b.txt");
            char[] chars = new char[1024];
            int b=0;  //每次读取的有效个数
            while ((b=fileReader.read(chars))!=-1){
                /*
                    String类的构造方法
                     String(char[] value)把字符数组转换为字符串
                     String(char[] value, int offset , int count)把字符数组的一部分转换为字符串, offset数组的开始索引  count转换的个数
                    
                */
                System.out.println(new String(chars,0,b));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值