什么是IO流?

I:Input

O:Output

JAVA-IO流实践操作_System

通过IO可以完成硬盘文件的读和写。

流是一连串连续动态的数据集合。可以理解为是我们在内存和硬盘之间进行文件读写的一个管道。抽象的一个概念。我们可以看成是一个管道,我们输入的数据要从管道的一端留到另一端去,在计算机里就是从内存读取数据到程序

什么时候使用IO流?

当内存需要从硬盘读取文件的时候

谁来操作的输入输出?

计算机

JAVA-IO流实践操作_数据_02

输入和输出分别指的是谁?

  • 输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中
  • 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中

Java中流在哪个包下?

java.io.*;

有哪些流(分类)?

InputStream

OutputStream

Read

Write

  1. 按照流的方向(以内存作为参照物):
  • Input/Read:往内存中去,输入
  • Output/Write::从内存中出来,输出
  1. 按读取数据方式不同:
  • Stream字节流

一次读取1个字节byte,等同于一次读取8个二进制,什么类型的文件都可以读取。包括:文本文件、图片、声音文件、视频

假设文件file1.txt,采用字节流的话是:

a中国bc张三fe:

第一次读:一个字节,正好读到'a'

第二次读:一个字节,正好读到'中'字符的一半

第三次读:一个字节,正好读到'中'字符的另一半

  • Reader/write字符流

一次读取一个字符,这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连word都无法读取

假设文件file1.txt,采用字节流的话是:

第一次读:'a'字符('a'字符在windows系统中占用1个字节)

第二次读:'中'字符('中'字符在windows系统中占用2个字节)

在java中只要“类名”以stream结尾的都是字节流。以“reader/writer”结尾的都是字符流(以谁结尾就是什么流)

JAVA-IO流实践操作_数据_03

方法

close():关闭

内存和硬盘之间的通道,用完之后一定要关闭,不然会耗费(占用)很多资源

flush():刷新

把管道清空,如果管道中剩余一些内容没有输出完毕,则会强制把剩余部分输出完。

注意:如果没有flush()可能会导致丢失数据

具体的流类及使用

InputStream

JAVA-IO流实践操作_数据_04

基本方法

JAVA-IO流实践操作_数据_05

PutputStream

JAVA-IO流实践操作_java_06

基本方法

JAVA-IO流实践操作_java_07

Reader

两个字节两个字节读

JAVA-IO流实践操作_System_08

基本方法

JAVA-IO流实践操作_java_09

Writer

JAVA-IO流实践操作_java_10

基本方法

JAVA-IO流实践操作_java_11

节点流类型

线程和线程之间的通信

JAVA-IO流实践操作_数据_12


import java.io.*;

public class TestFileInputStream {
    public static void main(String[] args){
        int b =0;
        FileInputStream in =null;
        try{
            //已经连接管道
            in = new FileInputStream("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
            System.exit(-1);
        }

        try {
            long num =0;
            //读一个字节放到b这个变量里面,!=-1表示还没有都到结尾,
            while ((b = in.read())!=-1) {
                //强制转换为char类型打印出来
                System.out.print((char)b);
                //计数
                num++;
            }
            in.close();
            System.out.println();
            System.out.println("共读取了"+num+"个字符");
        } catch (Exception e) {
            System.out.println("文件读取错误");
            System.exit(-1);
        }
    }
}
 
import java .io.*;

public class TestFileOutputStream {
    public static void main(String[] args){
        int b =0;
        FileInputStream in =null;
        FileOutputStream out =null;
        try {
            in = new FileInputStream("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
            out = new FileOutputStream("C:\\Users\\denglimei\\Desktop");
            while((b=in.read())!=-1){
                out.write(b);
            }
            in.close();   //每读取一个文件就关闭
            out.close();
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
            System.exit(-1);
        } catch (IOException e) {
            System.out.println("文件复制错误");
            System.exit(-1);
        }
        System.out.println("文件已复制");
    }
}
 
import java.io.*;

public class TestFileReader {
    public static void main(String[] args){
        FileReader fr =null;
        int c =0;
        try {
            fr = new FileReader("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
            int ln =0;
            while((c=fr.read()) !=-1){
                System.out.print((char)c);
            }
            fr.close();
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
        }catch(IOException e){
            System.out.println("文件读取错误");
        }

    }
}


import java.io.*;

public class TestFileWriter {
    public static void main(String[] args){
        FileWriter fw = null;
        try {
            fw = new FileWriter("C:\\Users\\denglimei\\Desktop\\快捷键.txt");
            for (int c =0; c<=50000; c++) {
                fw.write(c);
            }
        } catch (IOException e1) {
            e1.printStackTrace();
            System.out.println("文件写入错误");
            System.exit(-1);
        }

    }
}


缓冲流

JAVA-IO流实践操作_System_13

转换流(TransformIO)

JAVA-IO流实践操作_System_14

数据流(DataStream)

JAVA-IO流实践操作_System_15

输出流(Print)

JAVA-IO流实践操作_数据_16

Object流

直接将Object写入或流出


思维导图

JAVA-IO流实践操作_数据_17