IO流基础

一、概念

1.IO流:存储和读取数据的解决

二、流的分类

1.流的方向:输出流和输入流

2.操作文本类型:字节流和字符流

三、字节流

1、有字节输出流(outputStream)和字节出入流(inputStream)

2.FileOutputStream

(1)操作本地文本的输出流,可以把程序中的数据写入到本地文件中

(2)书写步骤

        创建对象,写出数据,释放资源

(3)三个步骤的细节

        创建对象:文本存在,文本不存在,追加写入

        写入数据:写出整数,写出字节数组,换行写

        释放资源:关闭通道

3.FileInputStrem

        (1)操作本地的字节输入流,可以把本地文本中的数据读取到程序中来

        (2)书写步骤:

                (1)创建字节输入流对象:如果指定的路径没有存在,就会报错

                  (2)读取数据:读取时一次读取一个字节,输出来的数据会在ASCll上对应的数字

                         读取到文本末尾了,read方法会返回-1

                   (3)释放资源:每次完必须释放资源

IO的异常处理

手动处理异常

//IO流的异常处理
//手动捕获异常
public class IOException {
    public static void main(String[] args) {
        FileInputStream file = null;
        int numbers;
        byte[] bytes = new byte[4];

        try {

            file = new FileInputStream("src/com/io流/b.txt");
//            numbers=file.read(bytes);
            while ((numbers = file.read(bytes)) != -1){
                String s =  new String(bytes,0,numbers);
                System.out.print(s);
            }

        }
        catch (java.io.IOException e) {
            e.printStackTrace();
        }

        finally {
            if (file != null){
                try {
                    file.close();
                } catch (java.io.IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

JDK7自动处理IO异常

public class IOExceptionJDK7 {
    public static void main(String[] args) {

//        JDK处理的异常

        int numbers;
        byte[] bytes = new byte[4];

        try (FileInputStream file = new FileInputStream("src/com/io流/a.txt")){
//            numbers=file.read(bytes);
            while ((numbers = file.read(bytes)) != -1){
                String s =  new String(bytes,0,numbers);
                System.out.print(s);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JDK9处理异常

public class IOExceptionJDK9 {
//    JDK9处理IO异常

    public static void main(String[] args) throws FileNotFoundException {
        int numbers;
        byte[] bytes = new byte[4];
        FileInputStream file =new FileInputStream("src/com/io流/a.txt");
        try (file){
//            numbers=file.read(bytes);
            while ((numbers = file.read(bytes)) != -1){
                String s =  new String(bytes,0,numbers);
                System.out.print(s);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四、字符流原理

1.创建字符输入流对象

        底层:关联文件,并创建缓冲区(长度为8192的字节数组)

2.读取数据

        底层:(1)判断缓冲区是否有数据,如果有数据直接获取,如果没有,就从文件中获取到缓冲区中,在从缓冲区读取数据 ,如果文件中没有数据了,返回结果 -1

        (2)空参的reade方法:一次读取一个字节,遇到中文一次读取多个字节,把字节解码成十进制返回,

        (3)有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中

五、高级

1.缓冲流

        字节缓冲流 :字节缓冲输入流(BufferedInputStream)字节缓冲输出流(BufferedOuputStream)

        字符缓冲流:字符缓冲输入流(BufferedReader)字符缓冲输出流(BufferedWriter)        

2.缓冲流有几种:有4中,以上4种

3.缓冲流为什么能提高性能

        缓冲流自带长度为8192的缓冲区

        可以显著提高字节流的读写性能

        对于字符流提高不明显,对于字符流缓冲区而言关键点是两个特有的方法

3.字符缓冲流两个特有的方法是什么?

        字符缓冲输入流BufferedReader: readLine()

        字符缓冲输出流Buffereder:  newLine()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值