关于Java中的IO流总结(推荐)

 更新时间:2017年05月01日 10:00:45   投稿:jingxian  
下面小编就为大家带来一篇关于Java中的IO流总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1、 流的继承关系,以及字节流和字符流。

2、 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream。以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter。

3、 转换流InputStreamReader和OutputStreamWriter

一:流的继承关系

字节流

字符流

字符流和字节流的使用范围:字节流一般用来处理图像,视频,以及PPT,Word类型的文件。字符流一般用于处理纯文本类型的文件,如TXT文件等,字节流可以用来处理纯文本文件,但是字符流不能用于处理图像视频等非文本类型的文件。

二:处理流BufferedReader,BufferedWriter,BufferedInputStream

BufferedOutputsStream,都要包上一层节点流。也就是说处理流是在节点流的基础之上进行的,带有Buffered的流又称为缓冲流,缓冲流处理文件的输入输出的速度是最快的。所以一般缓冲流的使用比较多。

下面是两个简单的文件复制的实例:

public class MycopyTest {
  public static void main(String[] args) {
    File src = new File("D:/1.jpg");
    // D:/1.jpg必须的存在不然会报错
    File dest = new File("D:/2.jpg");
    // 如果D:/2.jpg存在则覆盖,如果不存在则新建
    streamCopy(src, dest);
  }
private static void readCopy(File src,File dest)
  {
    FileReader fr=null;
    FileWriter fw=null;
    BufferedReader br=null;
    BufferedWriter bw=null;
    try {
      fr=new FileReader(src);
      fw=new FileWriter(dest);
      br=new BufferedReader(fr);
      bw=new BufferedWriter(fw);
      String str;
      while((str=br.readLine())!=null)
      {
        bw.write(str);
        bw.newLine();
      }
    }catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try {
      bw.close();
      br.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }
  private static void streamCopy(File src, File dest) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    try {
      fis = new FileInputStream(src);
      fos = new FileOutputStream(dest);
      bis = new BufferedInputStream(fis);
      bos = new BufferedOutputStream(fos);
      int len;
      byte[] b = new byte[1024];
      while ((len = bis.read(b)) != -1) {
        bos.write(b, 0, len);
        // bos.write(b,0,len);是把读到数组的大小字节写入
        // bos.write(b);最后一次如果数组未写满的话就会多读。
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try {
      bos.close();
      bis.close();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

 三:转换流InputStreamReader和OutputStreamWriter

 转换流的作用,文本文件在硬盘中以字节流的形式存储时,通过InputStreamReader读取后转化为字符流给程序处理,程序处理的字符流通过OutputStreamWriter转换为字节流保存。

public class InputStreamWriterTest {
  public static void main(String[] args) {
    File src = new File("D:/Files/哈哈.txt");
    File dest = new File("D:/Files/斯密斯.txt");
    BufferedWriter bw = null;
    BufferedReader br = null;
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
      fis = new FileInputStream(src);
      fos = new FileOutputStream(dest);
      InputStreamReader ir = new InputStreamReader(fis, "GBK");
      OutputStreamWriter ow = new OutputStreamWriter(fos, "GBK");
      bw = new BufferedWriter(ow);
      br = new BufferedReader(ir);
      String str;
      while ((str = br.readLine()) != null) {
        bw.write(str);
        bw.newLine();
        bw.flush();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    try {
      bw.close();
      br.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

以上这篇关于Java中的IO流总结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java通过卖票理解多线程

    Java通过卖票理解多线程

    本文主要介绍了一个多线程卖票的例子,通过卖票这个实例来介绍多线程的方式,加深理解,需要的朋友可以参考下
    2017-09-09
  • 浅谈java中的局部变量和全局变量

    浅谈java中的局部变量和全局变量

    这篇文章主要涉及了java中的局部变量和全局变量,就二者的含义、生存时间和创建位置作了介绍,需要的朋友可以参考下。
    2017-09-09
  • Java线程池复用线程的秘密你知道吗

    Java线程池复用线程的秘密你知道吗

    这篇文章主要为大家详细介绍了Java线程池复用线程的秘密,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望您能够多多关注

    2022-03-03
  • SpringBoot中对应2.0.x版本的Redis配置详解

    SpringBoot中对应2.0.x版本的Redis配置详解

    这篇文章主要为大家介绍了SpringBoot中对应2.0.x版本的Redis配置详解,文中的实现步骤讲解详细,感兴趣的小伙伴们可以了解一下
    2022-06-06
  • 分布式之全面了解Kafka的使用与特性

    分布式之全面了解Kafka的使用与特性

    Kafka 是我工作多年使用最多的消息中间件 ,特点是拥有巨大吞吐量(数百万/秒),作为当下最流行的分布式,可水平扩展,可容错的“消息系统”,下面跟随小编看下分布式之全面了解Kafka的使用与特性
    2021-11-11
  • springboot全局配置文件与多环境配置的全过程

    springboot全局配置文件与多环境配置的全过程

    SpringBoot项目在多环境配置上表现的非常优秀,只需要非常简单的操作就可以完成配置,下面这篇文章主要给大家介绍了关于springboot全局配置文件与多环境配置的相关资料,需要的朋友可以参考下
    2021-12-12
  • SpringBoot结合JWT实现用户登录、注册、鉴权

    SpringBoot结合JWT实现用户登录、注册、鉴权

    用户登录、注册及鉴权是我们基本所有系统必备的,也是很核心重要的一块,本文主要介绍了SpringBoot结合JWT实现用户登录、注册、鉴权,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-05-05
  • Java嵌套for循环的几种常见优化方案

    Java嵌套for循环的几种常见优化方案

    这篇文章主要给大家介绍了关于Java嵌套for循环的几种常见优化,在Java中优化嵌套for循环可以通过以下几种方式来提高性能和效率,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • SpringBoot在线代码修改器的问题及解决方法

    SpringBoot在线代码修改器的问题及解决方法

    这篇文章主要介绍了SpringBoot在线代码修改器的问题及解决方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 10中java常见字符串操作实例

    10中java常见字符串操作实例

    给大家分享10中java常见字符串操作方法以及相关实例代码,对此有需要的读者们可以学习参考下。
    2019-07-07

最新评论