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

相关文章
|
6月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
473 6
|
7月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
939 3
|
7月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
563 0
Java API 开发者
236 0
|
9月前
|
安全 Java 网络安全
Java 实现 SMTP 协议调用的详细示例及实战指南 SMTP Java 调用示例
本文介绍了如何使用Java调用SMTP协议发送邮件,涵盖SMTP基本概念、JavaMail API配置、代码实现及注意事项,适合Java开发者快速掌握邮件发送功能集成。
1106 0
|
9月前
|
算法 搜索推荐 Java
Java中的Collections.shuffle()方法及示例
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的方法,基于 Fisher-Yates 算法实现,支持原地修改。可选传入自定义 `Random` 对象以实现结果可重复,适用于抽奖、游戏、随机抽样等场景。
362 0
|
10月前
|
存储 安全 Java
应届生面试高频 Java 基础问题及实操示例解析
本文总结了Java基础面试中的高频考点,包括数据类型分类、final修饰符的三种用途、static关键字特性、==与equals的区别、Java只有值传递的特性、String的不可变性、Error与Exception的差异、程序初始化顺序规则,以及IO流的字节流/字符流分类。每个问题都配有简明定义和典型示例,如用final修饰变量示例、static方法调用限制说明等,帮助应聘者快速掌握核心概念和实际应用场景。
266 0
|
10月前
|
Java 关系型数据库 MySQL
2025 年互联网公司校招 Java 面试题总结及答案实操示例解析
本项目基于Spring Boot 3与Java 17技术栈,围绕校园招聘常见面试题,提供核心知识点的实操示例。涵盖多线程、RESTful API设计、数据库操作(Spring Data JPA)、事务管理及异常处理等。通过完整代码实现与运行步骤,帮助理解用户管理、线程池配置等实际应用场景。资源包含项目结构、关键代码示例(如User实体类、UserService服务层、ThreadService多线程实现)及数据库迁移脚本,适合深入学习与实践。环境要求:JDK 17+、Maven 3.8+、MySQL 8.0+。
353 3
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
539 38