IO流---字节输入输出流,字符输入输出流

IO流概述

IO流,即输入输出流(Input Output Stream),是一种抽象概念,用来处理设备之间的数据传输问题,例如文件复制、文件上传、文件下载等。在Java中,对数据的操作通常是通过流的方式进行的,这些用于操作流的类都包含在IO包中。

按照流向分类,IO流可以分为输入流和输出流。输入流主要用于从外部设备(如文件、键盘、网络等)读取数据,而输出流则用于将数据写入外部设备。

按照数据类型分类,IO流可以分为字节流和字符流。字节流通常用于处理二进制数据,如图片、音频、视频等而字符流则只能操作纯字符数据,适用于处理文本文件等。

Java IO流还包括一些常用的父类,如字节流的InputStream和OutputStream,以及字符流的Reader和Writer。这些父类提供了读写数据的基本方法,子类可以通过继承这些父类来实现具体的数据读写操作。

字节输入流

以下是使用FileInputStream读取文件内容的基本步骤:

  1. 创建一个FileInputStream对象,指定要读取的文件的路径。
  2. 读取文件中的数据。可以使用read()方法一次读取一个字节,或者使用read(byte[] b)方法一次读取多个字节到字节数组中。
  3. 处理读取到的数据。
  4. 关闭输入流,释放系统资源。

实例一: 读取文本内容

public class IOLearn1 {
    public static void main(String[] args) throws Exception {
        //创建一个FileInputStream对象
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt");
        int data;
        //每次读取一个字节
        while ((data=fileInputStream.read())!=-1){
            System.out.print((char)data);
        }
        //关闭输入流
        fileInputStream.close();
    }
}

a.txt文本内容

实现结果:

实例二:以数组方式读取文本内容

import java.io.FileInputStream;

public class IOLearn2 {
    public static void main(String[] args) throws Exception {
        //创建一个FileInputStream对象
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt");
        byte[] buffer=new byte[3];
        //每次读取字节数组
        int readCount;//返回此次读取到数组中字节个数
        while ((readCount=(fileInputStream.read(buffer)))!=-1){
            String s = new String(buffer, 0, readCount);
            System.out.print(s);
        }
        //关闭输入流
        fileInputStream.close();
    }
}

注意:在以数组方式读取字节时, 新读取的字节会从前到后替代原有数组字符。

字节输出流

实例:复制文件,将a.txt内容复制到b.txt中

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class IOLearn3 {
    public static void main(String[] args) throws Exception {
        //创建一个FileInputStream对象
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt");
        //创建文件输出流对象
        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt");
        //读取a.txt文件中的数据写入到b.txt中
        int data;
        while ((data=fileInputStream.read())!=-1){
            fileOutputStream.write(data);
        }
        fileInputStream.close();
        fileOutputStream.close();
    }
}

结果:文件内容复制成功

注意:字节输入输出流适用于文件的复制,在读取文件可能会出现乱码,即使用字节输入流中的数组读取方式也不是好的选择,因为要使的不出现乱码就要求一次读取完文件中所用的字节,就要求数组长度要容纳文件中数据而内存远小于磁盘,此种方式会出现内存溢出,因此,字节输入流不适用读取文件内容。

字符输入流

实例:使用字符输入流读取文件内容

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;

public class IOLearn4 {
    public static void main(String[] args) throws Exception {
        //创建字符输入流管道
        FileReader fileReader = new FileReader("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt");
        //读取数据
        int read;
//        while((read = fileReader.read())!=-1){
//            System.out.print((char) read);
//        }
//        fileReader.close();
        System.out.println("======================");
        //使用字符数组读取数据
        char [] chars=new char[3];
        while ((read = fileReader.read(chars))!=-1){
            System.out.print(new String(chars,0,read));
        }

    }
}

结果:

字符输出流

实例:复制文件

import java.io.FileReader;
import java.io.FileWriter;

public class IOLearn5 {
    public static void main(String[] args) throws Exception {
        //创建字符输入流管道
        FileReader fileReader = new FileReader("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\a.txt");
        //读取数据
        int read;
        FileWriter fileWriter=new FileWriter("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\lambada\\b.txt");
        //使用字符数组读取数据
        char [] chars=new char[3];
        while ((read = fileReader.read(chars))!=-1){
            fileWriter.write(chars, 0, read);
            fileWriter.flush();
        }
        fileReader.close();
        fileWriter.close();

    }
}

结果:

注意在使用字符输出流输出数据到外部文件中时,要将缓存中的数据写入到外部文件中,也就是刷新流或者关闭流。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜小白也想的美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值