1.概述

当需要进行数据的传输时可以使用IO流进行,将磁盘中的数据传输到内存,或从网络读取到内存中。
IO流根据处理数据类型不同分为字符流和字节流,又根据流向不同,分为流入和流出,对流入对象只能进行读操作,流出对象只能进行写操作。

数据类型

顶层父类

字节流(输入)

Java.io.InputStream

字节流(输出)

Java.io.OnputStream

字符流(输入)

Java.io.Reader

字符流(输出)

Java.io.Writer

2.字节输入流

FileInputStream用来读取文件数据的字节输入流

2.1构造方法

//传入文件路径创建流对象  抛出异常
        FileInputStream inputStream1 = new FileInputStream("F:\\IDEA\\code\\test\\1.txt");
//        System.out.println(inputStream1);

        //传入文件路径的File对象创建流对象
        File file = new File("F:\\IDEA\\code\\test\\1.txt");
        FileInputStream inputStream2 = new FileInputStream(file);

2.2一次读入一个字节

/*
        一次读入一个字节:public int read() throws IOException
        当所有字节读入完成以后,返回值为-1,可以以此为依据进行循环读出所以字节
         */
        int read = 0;
        while((read = inputStream1.read())!=-1){
            System.out.println(read);
        }

2.3一次读入一个字节数组

/*
        一次读入一个字节数组:public int read(byte b[]) throws IOException
        传入一个字节数组,最多读取一个字节数组的数据,并且会把数据存入到数组中
        返回值代表本次读取到的字节的个数
        与read()相同,当所有数据读取完成以后,返回值为-1
         */
        byte[] bytes = new byte[10];
        int read1 = inputStream2.read(bytes);//返回读取字节的长度
        String s = new String(bytes, 0, read1);//将所有字节数组转换为字符串
        System.out.println(s);
        //当文件字节数过多时,需要读取到多个字节数组中,以此需要循环读入时
        byte[] bytes1 = new byte[2];
        int len;
        while ((len=inputStream2.read(bytes1))!=-1){
            System.out.println(new String(bytes1,0,len));//限制有效长度,为了最后没有填满数组是,读取有效值
        }

**注意1:**在读入的最后要进行资源释放

inputStream1.close();
 inputStream2.close();

**注意2:**读取过程中进行了异常抛出

public static void main(String[] args) throws IOException {
}

3.资源释放

当不进行异常抛出是,怎么进行资源释放,这里仅展示的是JDK7版本,使用try…cash…resource的写法。在try后面加()。把需要释放的资源在小括号中定义,就不需要自己去释放资源了。

public static void main(String[] args) {
        try( FileInputStream inputStream1 = new FileInputStream("F:\\IDEA\\code\\test\\1.txt");){
             /*
        一次读入一个字节:public int read() throws IOException
        当所有字节读入完成以后,返回值为-1,可以以此为依据进行循环读出所以字节
         */
            int read = 0;
            while((read = inputStream1.read())!=-1){
                System.out.println(read);
            }
            inputStream1.close();//会自动执行释放资源的功能
        }catch (IOException e){

        }