java io流

什么是流(Stream),流就是一系列的数据
当不同的介质之间有数据交互的时候,JAVA就使用流来实现。
数据源可以是文件,还可以是数据库,网络甚至是其他的程序

输入流: InputStream
输出流:OutputStream

InputStream是字节输入流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。
FileInputStream 是InputStream子类,以FileInputStream 为例进行文件读取

字节输入流

	try {
        //准备文件lol.txt其中的内容是AB,对应的ASCII分别是65 66
        File f =new File("d:/lol.txt");
        //创建基于文件的输入流
        FileInputStream fis =new FileInputStream(f);
        //创建字节数组,其长度就是文件的长度
        byte[] all =new byte[(int) f.length()];
        //以字节流的形式读取文件所有内容
        fis.read(all);
        for (byte b : all) {
            //打印出来是65 66
            System.out.println(b);
        }
         
        //每次使用完流,都应该进行关闭
        fis.close();
          
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

字节输出流

	 try {
        // 准备文件lol2.txt其中的内容是空的
        File f = new File("d:/lol2.txt");
        // 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
        byte data[] = { 88, 89 };

        // 创建基于文件的输出流
        FileOutputStream fos = new FileOutputStream(f);
        // 把数据写入到输出流
        fos.write(data);
        // 关闭输出流
        fos.close();
         
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

close流的方式

try()的方式(个人推荐)

把流定义在try()里,try,catch或者finally结束的时候,会自动关闭 这种编写代码的方式叫做
try-with-resources, 这是从JDK7开始支持的技术

所有的流,都实现了一个接口叫做 AutoCloseable,任何类实现了这个接口,都可以在try()中进行实例化。 并且在try,
catch, finally结束的时候自动关闭,回收相关资源。

    File f = new File("d:/lol.txt");

    //把流定义在try()里,try,catch或者finally结束的时候,会自动关闭
    try (FileInputStream fis = new FileInputStream(f)) {
        byte[] all = new byte[(int) f.length()];
        fis.read(all);
        for (byte b : all) {
            System.out.println(b);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

Finally的方式

这是标准的关闭流的方式

  1. 首先把流的引用声明在try的外面,如果声明在try里面,其作用域无法抵达finally.
  2. 在finally关闭之前,要先判断该引用是否为空
  3. 关闭的时候,需要再一次进行try catch处理
	File f = new File("d:/lol.txt");
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(f);
        byte[] all = new byte[(int) f.length()];
        fis.read(all);
        for (byte b : all) {
            System.out.println(b);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        // 在finally 里关闭流
        if (null != fis)
            try {

                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

字符流

Reader字符输入流

FileReader 是Reader子类,以FileReader 为例进行文件读取

	// 准备文件lol.txt其中的内容是AB
    File f = new File("d:/lol.txt");
    // 创建基于文件的Reader
    try (FileReader fr = new FileReader(f)) {
        // 创建字符数组,其长度就是文件的长度
        char[] all = new char[(int) f.length()];
        // 以字符流的形式读取文件所有内容
        fr.read(all);
        for (char b : all) {
            // 打印出来是A B
            System.out.println(b);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Writer字符输出流

	// 准备文件lol2.txt
    File f = new File("d:/lol2.txt");
    // 创建基于文件的Writer
    try (FileWriter fr = new FileWriter(f)) {
        // 以字符流的形式把数据写入到文件中
        String data="abcdefg1234567890";
        char[] cs = data.toCharArray();
        fr.write(cs);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值