介绍IO输入流,输出流并介绍两者的基本用法

一,什么是IO
概念:是以流为基础进行数据的输入输出。通俗点说就是java通过数据流方式和外部进行通讯。
IO中数据的操作是通过流的方式,我们可以把数据流看成水流一样,他可以从一个源头端流入到另一个目的端,且水流不是一次全部到达,而且连续的流入目的端。I是指从外部设备的数据流流入java程序的流,o是指从java程序中把数据流输出到其他设备中的流。
IO操作的2个步骤
1、准备数据
2、把数据从内核中拷贝到程序进程

IO的分类

根据数据的流向分为:输入流输出流

输入流input:读取外部数据(磁盘、光盘等存储设备的数据)程序(内存)中的流。

输出流output:将程序(内存)数据输出到磁盘、光盘等存储设备中的流。

按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)。

按数据流的流向不同分为:输入流,输出流。

按流的角色的不同分为:节点流,处理流。

二, 字节流

概念:InputStreamOutputStream是两个抽象类,是字节流的基类,所有具体的字节流实现类都是分别继承了这两个类。

字节输入流:

字节输入流【InputStream】java,io.Inputstream 抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。

public void close():关闭此输入流并释放与此流相关联的任何系统资源。

public abstract int read() : 从输入流读取数据的下一个字节。

public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组b中。

close方法,当完成流的操作时,必须调用此方法,释放系统资源。

/**
 * @author 高影  2022/12/13  11:57
 * @version 1.0
 */
public class Demo03 {
    public static void main(String[] args) throws IOException {
        //输出流:把内容的内存输出到文件中(写操作) 输入流:把文件的内容输入到内存中(读操作)
        File f1 = new File("D:/a.txt");
        f1.createNewFile();
        String s = "abcde";
        OutputStream out = new FileOutputStream(f1);
        out.write(s.getBytes());
        //定义输入流来读取文件内容
        InputStream in = new FileInputStream(f1);

        //读一个字节,把当前字符转换成对应的整数 返回
        int c1 = in.read();
        System.out.println(c1);

    }
}

字节输出流:

字节输出流【OutputStream】java.io.0utputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。

public void close() :关闭此输出流并释放与此流相关联的任何系统资源。

public void flush() : 刷新此输出流并强制任何缓冲的输出字节被写出。

public void write(byte[] b) : 将 b.length字节从指定的字节数组写入此输出流。

public void write(byte[] b, int off, int len) :从指定的字节数组写入len字节,从偏移量 off开始输出到此输出流。

public abstract void write(int b):将指定的字节输出流。

/**
 * @author 高影  2022/12/13  10:49
 * @version 1.0
 */
public class Demo01 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("d:/aa");
        File f2 = new File(f1,"a.txt");
        f1.mkdirs();
        f2.createNewFile();

        //使用OutPutStream输出流完成对文件的写入操作  内存输出到文件
        OutputStream out = new FileOutputStream(f2); //定义一个输出流,输出到f2文件中
        //out.write(97);//按照ASCII解析数字 写入文件中  写入的是97对应的 a
        byte[] bytes = {97,98,99,100,101,102,103};
        //out.write(bytes); //按照ASCII解析数字 写入文件中  写入的是:abcdefg
        out.write(bytes,2,3); // 从数组 指定索引位置2 写入3个元素

    }
}

/**
 * @author 高影  2022/12/13  11:05
 * @version 1.0
 */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("d:/来自一个爱你的表白");
        f1.createNewFile();

        OutputStream out = new FileOutputStream(f1);

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String msg = sc.next();
        byte[] bytes = msg.getBytes(); //获取字符串对应解析后的byte数组
        out.write(bytes);

    }
}

 综合案例:完成文件的复制

在D盘中新建文件a.txt里面写入内容

/**
 * @author 高影  2022/12/13  13:17
 * @version 1.0
 */
public class Demo04 {
    public static void main(String[] args) throws IOException {
        //创建文件对象
        File f1 = new File("D:/a.txt");
        f1.createNewFile(); //创建文件
        String s = "还和以前一样好好的"; // 准备写入的数据
        OutputStream out = new FileOutputStream(f1); //创建输出对象
        out.write(s.getBytes());

        //创建输入流对象
        InputStream in = new FileInputStream(f1);
        //获取字节返回一个int类型的变量
        int read = in.read();
        //初始化n
        int n;
        //使n=read值,当n不等于-1时,则打印出n的值
        while ((n=in.read()) !=-1){
            System.out.println(n);
        }
    }
}
/**
 * @author 高影  2022/12/13  13:17
 * @version 1.0
 */
public class Demo05 {
    public static void main(String[] args) throws IOException {
        //定义源文件和目标文件的File对象
        File f1 = new File("D:/a.txt");
        File f2 = new File("D:/f2.txt");

        //定义输入输出流关联文件
        InputStream in = new FileInputStream(f1);
        OutputStream out = new FileOutputStream(f2);

        byte[] b = new byte[10];
        int n;
        while ((n=in.read(b)) !=-1){
            out.write(b,0,n);
        }
    }
}

 

猜你喜欢

转载自blog.csdn.net/weixin_69036336/article/details/128276247