Java IO流 二

IO流原理及分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非文本比如视频、图像适合字节流,文本适合字符流。
在这里插入图片描述

IO流体系

在这里插入图片描述
在这里插入图片描述

FileReader读入数据

空参read方法

package demo10;


import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class IOTest {
    public static void main(String[] args) throws IOException {
        //1.实例化File对象,指明要操作的文件
        File file = new File("hello.txt");
        //2.提供具体的流
        FileReader fr = new FileReader(file);
        //3.数据的读入
        //read():返回读入的字符,如果达到文件末尾,返回-1
        int data = fr.read();
        System.out.println((char)data);
        while (data != -1){
            System.out.print((char)data);
            data = fr.read();
        }
        //4.流的关闭操作
        fr.close();
    }
}

在这里插入图片描述
改进

package demo10;


import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class IOTest {
    public static void main(String[] args) throws IOException {
        FileReader fr = null;
        //1.实例化File对象,指明要操作的文件
        File file = new File("hello.txt");
        try {
            //2.提供具体的流
            fr = new FileReader(file);
            //3.数据的读入
            //read():返回读入的字符,如果达到文件末尾,返回-1
            int data;
            while ((data = fr.read())!=-1){
                System.out.print((char)data);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.流的关闭操作
            fr.close();
        }
    }
}

使用read重载方法

package demo10;


import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class IOTest {
    public static void main(String[] args) throws IOException {
        FileReader fr = null;
        //1.实例化File对象,指明要操作的文件
        File file = new File("hello.txt");
        try {
            //2.提供具体的流
            fr = new FileReader(file);
            //3.数据的读入
            char[] cbuf = new char[5];
            int len;
            while ((len = fr.read(cbuf)) != -1) {
                for (int i = 0; i < len; i++) {
                    System.out.print(cbuf[i]);
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.流的关闭操作
            fr.close();
        }
    }
}

在这里插入图片描述
注意我们这里的循环里是i<len,我们下面把它改成i<cbuf.length
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
可以看到cbuf在每一次读取时被一个个覆盖,而不是清空重新赋值。
这里重载的reader方法的返回值是:
在这里插入图片描述
或者不用for循环,用String输出,也要注意char数组的长度问题:
在这里插入图片描述

FileWriter写出

package demo10;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class IOTest {
    public static void main(String[] args) throws IOException {
        //1.提供File类对象,指明写出到的文件
        File file = new File("Hello.txt");
        //2.提供FileWriter对象,用于数据的写出
        FileWriter fw = new FileWriter(file);
        //3.写出的操作
        fw.write("Hello World!");
        fw.write("Hello Java!");
        //4.流的关闭
        fw.close();
    }
}

在这里插入图片描述
加个换行
在这里插入图片描述
在这里插入图片描述
之前文件被覆盖了。
如果源文件存在,就覆盖,如果不存在,就创建然后写出。
如果不想覆盖,就在FileWriter构造器中添加个true。
在这里插入图片描述
可以看到该参数为append,既追加,默认为false,所以是覆盖。

字符流不能处理图片

不能使用字符流来处理字节数据!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值