java基础知识9——IO

IO流概述

IO流概述及分类

IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
流按流向分为两种:输入流,输出流
这里写图片描述

FileWriter类使用(字符输出流)

  • FileWriter向文件中写数据
    A:FileWriter向文件中写数据操作步骤:
    a:使用FileWriter流关联文件
    b:利用FileWriter的写方法写数据
    c:利用FileWriter的刷新方法将数据从内存刷到硬盘上
    d:利用FileWriter的关流方法将释放占用的系统底层资源
    B:FileWriter方法:
    构造方法
    FileWriter(String fileName) 传入一个文件的路径
    成员方法
    void write(String str) 向文件中写str
    void flush() 将内存中的数据刷新到文件中
    void close() 关流释放系统底层资源
  • FileWriter其它写方法
// 写一个字符串数据
void write(String str);
// 写一个字符串中的一部分数据
void write(String str,int index,int len);
// 写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97,上传到文件中显示的都是字符a
void write(int ch);
// 写一个字符数组数据
void write(char[] chs);
// 写一个字符数组的一部分数据
void write(char[] chs,int index,int len);
  • FileWriter写入换行以及向文本末尾追加

如何实现数据的换行?

windows:\r\n
linux:\n
mac:\r

如何实现数据的追加写入?

// 第二个参数表示,是否开启追加,默认为false,所以之前的构造方法FileWriter(String fileName);中每次输出的数据,都会覆盖之前的数据,当append的值为true时,之前的数据就不会丢失
FileWriter fw = new FileWriter("c.txt",true);

FileReader类使用(字符输入流)

FileReader读数据一次读取一个字符
FileReader fileReader = new FileReader();
fileReader.reader();

以下是代码:

@Test
public void test() throws Exception{
    // 创建输入流对象
    FileWriter fileWriter = new FileWriter("F:\\IO.txt");

    // 输入数据
    fileWriter.write("输入对");

    // 刷新
    fileWriter.flush();

    // 关闭流
    fileWriter.close();

    // 创建输出流对象
    FileReader fileReader = new FileReader("F://IO.txt");

    // 循环输出
    int ch ;
    while((ch = fileReader.read()) != -1) {
        System.out.println((char)ch);
    }

    // 关闭输出流
    fileReader.close();
}
  • 这里需要注意,fileReader.reader(),这个方法,当文件中没有数据时,获取到的值是-1,所以可以通过这个特性进行判断文件是否循环完毕;还有一点,就是通过fileReader.reader获取的数据是根据选择的FileReader中的方法的返回值决定的,一般选用返回值为int类型的,如果是中文,需要通过强制转换将整形转换为字符型
利用FileReader和FileWriter完成文件复制
  • 读一次写一次
public void test2() throws Exception {
    // 创建输入流对象
    FileReader fileReader = new FileReader("F:\\IO.txt");

    // 创建输出流对象
    FileWriter fileWriter = new FileWriter("F:\\IO2.txt");

    // 通过输入流对象获取数据
    int ch;
    while((ch = fileReader.read()) != -1) {
        // 通过输出流对象将数据写入复制的文件中
        fileWriter.write(ch);
    }

    // 关闭输出流
    fileWriter.close();

    // 关闭输入流对象
    fileReader.close();
}
  • 利用字符数组拷贝文件
public void test3() throws Exception {
    // 创建输入流对象
    FileReader fileReader = new FileReader("F:/IO.txt");

    // 创建输出流对象
    FileWriter fileWriter = new FileWriter("F:/IO2.txt");

    // 循环读取文件----创建字符数组, 创建长度用于接收读取到的字符数
    char[] ch = new char[1024];
    int len;
    while((len = fileReader.read(ch)) != -1) {
        // 将读取到的数据写入新的文件中
        fileWriter.write(new String(ch, 0, len));
    }

    // 关闭流
    fileWriter.close();
    fileReader.close();
}
  • 拷贝文件的两种方式图解
    这里写图片描述

缓冲流介绍和使用

介绍

是一个高效的流,底层使用了输入流和输出流完成

BufferedWriter和BufferedReader

底层使用字符输入流和字符输出流对象,是高效的字符流

  • 高效的原因
包装 FileReader 之后
它的 read 方法把数据读到 cbuf 内
就不是单纯通过 IO 了
public BufferedReader(Reader in, int sz)
构造函数本身可以接受 sz 来设置缓存大小
默认是 81928k)
它开始会先从 IO 读取 8k 内容到自己设置的内存缓冲区内
调用 bufReader.read 方法时
会从 BufferedReader 缓存区中读取内容
避免每次 read 都通过 IO
实际上减少了 IO 访问次数。
同理
BufferedWriter 和 FileWriter 一样如此
因此
BufferedWriter、BufferedReader会相对更高效。
缓冲流复制文本文件的两种方式

第一种方式:使用缓冲流不使用字符数组(一次读取一个字符)
第二种方式:使用缓冲流使用字符数组(一次读取一个字符数组)

缓冲流的特有方法使用
  • BufferedWriter
    void newLine():写一个换行符,这个换行符由系统决定,不同的操作系统newLine()方法使用的换行符不同
    windows:\r\n
    linux:\n
    mac:\r
  • BufferedReader
    String readLine();一次读取一行数据,但是不读取换行符

java基础知识1——数据类型
java基础知识2——运算符
java基础知识3——流程控制语句
java基础知识4——数组
java基础知识5——方法
java基础知识6——面向对象
java基础知识7——String&StringBuilder
java基础知识8——ArrayList集合
java基础知识9——IO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值