美文网首页
Java文件输入输出流

Java文件输入输出流

作者: HelloTu | 来源:发表于2019-05-08 16:25 被阅读0次

在Android开发中,文件操作还是比较频繁的,本文主要记录下文件的加载,写入等相关操作的使用。

流的分类

在Java程序中操作文件,都是以流的形式来操作

  1. 首先按照流向可以分为输入流与输出流两种,这里的输入输出是站在内存的角度而言的,流向内存的为输入流,流出内存的为输出流
  2. 按照传输的单位可以分为字节流与字符流,字节流传输的是二进制字节,可操作任何类型的文件,字符流传输的是字符,只能用来读取文本文件

字节流

字节流有两个抽象的父类,InputStram和outputStream,本文主要记录文件的操作,其他的具体实现类暂不讨论,主要看一下经常使用的几个字节流实现类的使用。
针对文件操作的字节流主要包括FileInputStream与FileOutputStream

向磁盘写入文件

            File destFile = new File(filePath);
            FileOutputStream fileOutputStream = new FileOutputStream(destFile);
            fileOutputStream.write(content.getBytes());
            fileOutputStream.close();

写入文件比较简单,传入一个File对象构造FileOutputStream的对象,然后调用write方法即可,最后一定要调用close,释放资源

从磁盘读取文件

            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[1024];
            int i;
            while((i=fileInputStream.read(bytes))!=-1){
                stringBuilder.append(new String(bytes,0,i));
            }
            Log.i(TAG, stringBuilder.toString());
            fileInputStream.close();

相对于向磁盘写入,读取文件多了几行代码,但也很好理解。需要声明一个byte类型的数组,用于每次读取时将数据存入该数组,声明一个整型i用于保存一次读取到的字节数。最后再根据将字节数组转换成需要的类型,最后也需要调用close释放资源

缓冲流

缓冲流相对于上述的字节流字符流并不是一个层面的东西,它并不具备直接操作文件的能力,而是要基于上述的字节流和字符流为基础。之所以要设计缓冲流这个东西,是为了提高读写效率,因为缓冲是利用了将数据先缓存起来,然后再一起写入或读出,避免频繁的磁盘IO操作,提高读写速度。
针对字节流的缓冲流类有BufferedoutputStream和BufferedInputStream,实际这两个类的设计利用了装饰者模式,利用它可以把FileInputStream与FileOutputStream给包起来,然后操作文件

向磁盘写入文件

            FileOutputStream fileOutputStream = new FileOutputStream(destFile);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
            bufferedOutputStream.write(content.getBytes());
            bufferedOutputStream.flush();
            bufferedOutputStream.close();

使用的逻辑和FileInputStream差不多,只是包了一层,最后还调用了flush,用于刷新,相当于向磁盘写入一次

从磁盘读取文件

            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
            byte[] bytes = new byte[1024];
            int i;
            while((i=bufferedInputStream.read(bytes))!=-1){
                 stringBuilder.append(new String(bytes,0,i));
            }
            fileInputStream.close();
            bufferedInputStream.close();

使用方式与FileOutputStream也差不多,只是用BufferedInputStream把他包了起来

字符流

字符流主要包括FileWriter和FileReader,字符缓冲流BufferedWriter,BufferedReader,用法与上述的字节流基本一致,只不过调用read之后获取到的是字符类型,需要用char类型的数组去接收

            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            char[] chars = new char[1024];
            int charInt;
            while ((charInt = bufferedReader.read(chars))!=-1){
                Log.i(TAG,"char:"+new String(chars,0,charInt));
                stringBuilder.append(new String(chars,0,charInt));
            }
            Log.i(TAG,"stringResult : "+stringBuilder.toString());
            fileReader.close();
            bufferedReader.close();

另外在BufferedReader中还提供了readLine方法,按行读取文本文件

            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String s;
            while ((s=bufferedReader.readLine())!=null){
                stringBuilder.append(s);
            }
            Log.i(TAG,"stringResult : "+stringBuilder.toString());
            fileReader.close();
            bufferedReader.close();

以上是对于常用的输入输出流使用的总结,如果有写的不对的欢迎批评指正

相关文章

  • Java IO流

    标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好...

  • JAVA(一)文件流的输入和输出

    一.java输入流类 二.文件输出流 三.工作中的输入输出流 工作上的文件输入输出流都要判断流是否读取完整whil...

  • 数据存储到file(文件)中

    数据保存到文件中就是使用java流将数据写入文件中。android封装了获取输入输出流的两个方法openFileI...

  • Java文件输入输出流

    在Android开发中,文件操作还是比较频繁的,本文主要记录下文件的加载,写入等相关操作的使用。 流的分类 在Ja...

  • IO流分类讲解

    1 IO流基础 javaIO就是输入输出体系,简单的理解就是java对于文件内存网络资源的操作,在java传统的I...

  • Java的IO和NIO

    一、IO java的IO功能都在java.io包下,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两...

  • Java新特性之Java8的那些事儿-Stream

    什么是流? ​ Java Se中对于流的操作有输入输出IO流,而Java8中引入的Stream 属于Java ...

  • java7新特性4——快速读取文件

    java7快速读写文件 1.打开文件 Java 7可以直接用带缓冲区的读取器和写入器或输入输出流(为了和以前的Ja...

  • IO 概述

    对于java来说输入输出问题,java见它抽象成流对象来解决. IO流在java中从输入输出角度分类: 输入流 输...

  • Java互联网架构-一篇文精通JDK8lambada表达式

    一、流的概念 Java Se中对于流的操作有输入输出IO流,而Java8中引入的Stream 属于Java API...

网友评论

      本文标题:Java文件输入输出流

      本文链接:https://www.haomeiwen.com/subject/ulkvoqtx.html