2hutool实战:IoUtil 流操作工具类(获取getReader and getWriter)

简介: 2hutool实战:IoUtil 流操作工具类(获取getReader and getWriter)

image.png

用途:IO工具类(获取getReader and getWriter)

使用场景

IO工具类只是辅助流的读写,并不负责关闭流。原因是流可能被多次读写,读写关闭后容易造成问题。


(获取getReader and getWriter)


(获取getReader and getWriter)


(获取getReader and getWriter)


项目引用

此博文的依据:hutool-5.6.5版本源码image.png

方法明细

方法名称:cn.hutool.core.io.IoUtil.getUtf8Reader(java.io.InputStream)

方法描述

获得一个文件读取器,默认使用UTF-8编码

支持版本及以上

5.1.6

参数描述:image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

方法明细

方法名称:cn.hutool.core.io.IoUtil.getReader(java.io.InputStream, java.nio.charset.Charset)

方法描述

获得一个Reader

支持版本及以上

参数描述:image.pngimage.pngimage.pngimage.pngimage.png

    StringReader stringReader = null;
    PushbackReader pushbackReader = null;
    try {
      stringReader = new StringReader("123456789");
      //PushbackReader允许调用者将一些数据源本身不包含的字符插入到流的任意位置
      pushbackReader = IoUtil.getPushBackReader(stringReader,100);
      StringBuilder stringBuilder = new StringBuilder();
      char[] buff = new char[3];
      //第一步,首先读取 “123”
      int n = pushbackReader.read(buff, 0, 3);
      stringBuilder.append(buff);
      System.out.println("第一步,读取了 " + n + " 个字符:");
      System.out.println(buff);
      //第二步,unread:abc, de, fghi
      pushbackReader.unread(new char[]{'a', 'b', 'c'});
      pushbackReader.unread(new char[]{'d', 'e'});
      pushbackReader.unread(new char[]{'f', 'g', 'h', 'i'});
      int c = 0;
      while ((c = pushbackReader.read()) != -1){
        stringBuilder.append((char) c);
      }
      System.out.println("最终读取的数据:" + stringBuilder.toString());
    }catch (IOException e){
      //抛出一个运行时异常(直接停止掉程序)
      throw new RuntimeException("运行时异常",e);
    } finally {
      try {
        //如果是空的 说明流创建失败 失败了不需要关闭
        if (stringReader != null) {
          stringReader.close();
        }
      } catch (Exception e) {
        //关闭资源失败 停止程序
        throw new RuntimeException("关闭资源失败");
      }finally {
        try {
          if (pushbackReader != null) {
            pushbackReader.close();
          }
        } catch (Exception e) {
          throw new RuntimeException("关闭资源失败");
        }
      }
    }

image.pngimage.pngimage.pngimage.pngimage.png

    File dest = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/getWriterTest1.txt") ;
    FileOutputStream outputStream = null;
    OutputStreamWriter outputStreamWriter = null;
    try {
      //创建流
      outputStream = new FileOutputStream(dest);
      //新new OutputStreamWriter对象,记得关闭回收
      outputStreamWriter = IoUtil.getWriter(outputStream,CharsetUtil.CHARSET_UTF_8);
      String content = "1hello 小虚竹\n2hello 小虚竹";
      int c;
      for (int i = 0; i < content.length(); i++) {
        c = content.charAt(i);
        outputStreamWriter.write((char) c);
      }
      outputStreamWriter.flush();
    } catch (IOException e) {
      //抛出一个运行时异常(直接停止掉程序)
      throw new RuntimeException("运行时异常",e);
    } finally {
      try {
        //如果是空的 说明流创建失败 失败了不需要关闭
        if (outputStream != null) {
          outputStream.close();
        }
      } catch (Exception e) {
        //关闭资源失败 停止程序
        throw new RuntimeException("关闭资源失败");
      }finally {
        try {
          if (outputStreamWriter != null) {
            outputStreamWriter.close();
          }
        } catch (Exception e) {
          throw new RuntimeException("关闭资源失败");
        }
      }
    }

image.png

目录
相关文章
|
3月前
|
Java 开发者
Java IO流实战技巧:如何优化InputStream/OutputStream和Reader/Writer的使用?
【6月更文挑战第26天】Java IO流优化涉及缓冲、资源管理、字符编码和流式处理。使用Buffered流提高读写效率,如`BufferedInputStream`和`BufferedReader`。确保资源关闭使用try-with-resources,如`try (InputStream is = ...) {...}`。处理文本时指定编码,如`InputStreamReader(is, StandardCharsets.UTF_8)`防止乱码。流式处理大文件,分块读写避免内存溢出,以减少内存占用。这些技巧能提升程序性能和健壮性。
127 0
|
3月前
|
Java 数据处理 开发者
Java IO流专家级教程:深入理解InputStream/OutputStream和Reader/Writer的内部机制
【6月更文挑战第26天】Java IO流涉及字节流(InputStream/OutputStream)和字符流(Reader/Writer),用于高效处理数据输入输出。InputStream/OutputStream处理二进制数据,常使用缓冲提升性能;Reader/Writer处理文本,关注字符编码转换。两者都有阻塞IO操作,但Java NIO支持非阻塞。示例代码展示了如何使用FileInputStream/FileOutputStream和FileReader/FileWriter读写文件。理解这些流的内部机制有助于优化代码性能。
88 0
|
3月前
|
Java
深入探索Java IO流:InputStream/OutputStream与Reader/Writer的奥秘!
【6月更文挑战第26天】Java IO流用于输入输出操作,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)。InputStream和OutputStream处理字节数据,是所有字节流的基类,可被继承以自定义读写行为。
39 0
|
3月前
|
Java
Java IO流终极指南:从InputStream/OutputStream到Reader/Writer的全面解读
【6月更文挑战第26天】Java IO流涵盖字节流(InputStream/OutputStream)和字符流(Reader/Writer),前者处理二进制数据,后者专司文本。例如,FileInputStream/FileOutputStream用于文件的字节级读写,而FileReader/FileWriter处理字符级文本。Buffered流提供缓冲功能,提升效率。选择合适的流类取决于数据类型和性能需求。
51 0
|
4月前
|
JSON Java 网络安全
Java使用hutool工具类发送网络请求
Java使用hutool工具类发送网络请求
163 0
|
缓存 Java
深入解析 Java 中的 OutputStream:输出流的精髓揭秘
在 Java 编程中,输出流(OutputStream)是一个关键概念,它为我们提供了一种向目标写入数据的方法。无论是写入文件、网络数据还是其他输出目标,OutputStream 都是实现数据输出的不可或缺的工具。本文将带您深入探索 Java 中的 OutputStream,揭示其原理、用法以及在实际开发中的应用。
|
存储 Java 程序员
IO流常用类(打印流、序列化流、IO工具类)使用详解(二)
IO流常用类(打印流、序列化流、IO工具类)使用详解(二)
137 0
IO流常用类(打印流、序列化流、IO工具类)使用详解(二)
4hutool实战:IoUtil 流操作工具类(toStream转为流)
4hutool实战:IoUtil 流操作工具类(toStream转为流)
352 0
4hutool实战:IoUtil 流操作工具类(toStream转为流)