Java InputStream从文件读取示例

简介: 本文目录1. 知识点2. 代码示例3. 运行结果

1. 知识点

1,InputStream是输入流的抽象基类,定义了输入流应该实现的方法。


2,很重要的一个方法是read(byte[] buffer,int offset,int length),三个参数分别代表读到哪,从当前位置开始读取的偏移,读取长度。


3,一定要注意编码,比如UTF-8中中文一般占3个字节,数字和英文字母占一个字节,其他编码就不一定了,如果读取中文时length设置为1,那么显示读取中文的内容是会显示乱码。


4,流是一种连接,是占用资源的,使用后一定要关闭连接释放资源,一种方式是在finally中执行.close()方法确保关闭方法执行,还有一种直接利用try with resource的技术,需要java1.7以上版本支持。


5,本篇以读取文件为例介绍InputStream,读取其他对象基本上是一样的,因为都是InputStream的子类。


2. 代码示例

//工具类
package com.maoge.stream;
import java.io.File;
public class StreamUtils {
  //用于定义每次读取的长度
  public static final int BUFFER_LENGTH=512;
  //文件对象
  public static File FILE_FOR_READ;
  static{
    FILE_FOR_READ=new File("C:\\test.txt"); 
  }
}
//示例类
package com.maoge.stream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
  //测试入口
  public static void main(String[] args) {
    //从文件读取内容
    readFromFile();
    //另一种异常捕获方式
    readWithTryResources();
  }
  public static void readFromFile(){
    StringBuilder sb=new StringBuilder();
    InputStream in=null;
    try{
      in=new FileInputStream(StreamUtils.FILE_FOR_READ);
      byte buffer[]=new byte[StreamUtils.BUFFER_LENGTH];
      while(in.read(buffer,0,StreamUtils.BUFFER_LENGTH)!=-1){//-1表示读取结束
        sb.append(new String(buffer));
        System.out.println("部分:"+new String(buffer));
      }
      System.out.println("全文:"+sb.toString());
    }catch(Exception ex){
      System.out.println(ex.toString());
    }finally{//不管是否出现异常,都要确保关闭以释放资源
      try{
        in.close();
      }catch(IOException ioEx){
        System.out.println(ioEx.toString());
      }
    }
  }
  public static void readWithTryResources(){
    StringBuilder sb=new StringBuilder();
    try(InputStream in=new FileInputStream(StreamUtils.FILE_FOR_READ)){//自动关闭,注意该用法需要Java1.7以上版本才支持
      byte buffer[]=new byte[StreamUtils.BUFFER_LENGTH];
      while(in.read(buffer,0,StreamUtils.BUFFER_LENGTH)!=-1){
        sb.append(new String(buffer));
        System.out.println("部分:"+new String(buffer));
      }
      System.out.println("全文:"+sb.toString());
    }catch(Exception ex){
      System.out.println(ex.toString());
    }
  }
}

3. 运行结果

1,当BUFFER_LENGTH=10时,可以看到第三个中文出现乱码,你懂得。

部分:这是�
部分:��个完�
部分:�的测试
部分:本文1234
部分:abcd。234
全文:这是���个完��的测试本文1234abcd。234
部分:这是�
部分:��个完�
部分:�的测试
部分:本文1234
部分:abcd。234
全文:这是���个完��的测试本文1234abcd。234

2,当BUFFER_LENGTH=512时,执行结果比较完美。

image.png

相关文章
|
1月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
66 1
|
2月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
53 1
|
1月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
87 38
|
4月前
|
存储 Java API
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
91 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
56 9
|
2月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
32 1
|
2月前
|
Java API 网络安全
Java 发送邮件示例
本示例展示了如何使用Java编程语言发送电子邮件。通过利用JavaMail API,这段代码实现了从配置SMTP服务器,设置邮件属性,到发送邮件的全过程,为开发者提供了实用的参考。
194 10
|
2月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
120 1
|
3月前
|
JavaScript 前端开发 Java
Java 8 新特性详解及应用示例
Java 8 新特性详解及应用示例