Java InputStream从文件读取示例

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时,执行结果比较完美。

这里写图片描述


如有问题请扫码联系我
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页