package com.kj.test;
import cn.hutool.core.io.IoUtil;
import java.io.*;
/**
* Java IO字节流读取文件总结
* 本文对java IO流的读取文件的方式进行比较全面的总结,一个是基本的读取方式,另一个是高效的读取方式。
*/
public class FileInputTest {
public static void main(String[] args) {
/**
* 基本的读取方式:使用FileInputStream
*
* 文件读取FileInputStream的使用
*/
//需要读取的文件,参数是文件的路径名加文件名
File file = new File("D:/java2.txt");
if (file.isFile()) {
// 以字节流方法读取文件,
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
// 设置一个每次加载信息的容器,指定大小为1024
byte[] buf = new byte[1024];
// 定义一个StringBuffer用来存放字符串
StringBuffer buffer = new StringBuffer();
// 开始读取数据
int len = 0; // 每次读取到的数据长度
while ((len = fis.read()) != -1) { // len值为-1时,表示没有数据了
// append方法往buffer对象中添加数据
buffer.append(new String(buf, 0, len, "utf-8"));
}
// 输出字符串
System.out.println(buffer.length());
} catch (IOException e) {
e.printStackTrace();
} finally {
IoUtil.close(fis);
}
} else {
System.out.println("文件不存在");
}
/**
* 高效的读取方式:FileInputStream和BufferInputStream一起使用
*
* java中BufferedInputStream类相比InputStream类,提高了输入效率,增加了输入缓冲区的功能。
*
* InputStream流是指将字节序列从外设或外存传递到应用程序的流。
*
* BufferedInputStream流是指读取数据时,数据首先保存进入缓冲区,其后的操作直接在缓冲区中完成
*/
// 定义一个输入流对象
FileInputStream fileInputStream = null;
// 定义一个存放输入流的缓冲对象
BufferedInputStream bis = null;
// 定义一个输出流,相当于StringBuffer(),会根据读取数据的大小,调整byte数组的长度
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
// 把文件路径和文件名称作为参数传给FileInputStream
fileInputStream = new FileInputStream("D:/java2.txt");
// 把文件读取流对象传递给缓存读取流对象
bis = new BufferedInputStream(fileInputStream);
// 获得缓存读取流开始的位置
int len = bis.read();
System.out.println("len = " + len);
// 定义一个容器来盛放数据
byte[] buf = new byte[1024];
while ((len = bis.read(buf)) != -1) {
// 如果有数据的话,就把数据添加到输出流
// 这里也可以直接用StringBuffer的append方法接收
baos.write(buf, 0, len);
}
// 把文件输出流的数据,放到字节数组中
byte[] byteArray = baos.toByteArray();
// 打印输出
System.out.println(new String(byteArray, "gbk"));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 关闭所有流,先判空,再按后开先关的原则关闭
if (null != baos) {
baos.close();
}
if (null != bis) {
bis.close();
}
if (null != fileInputStream) {
fileInputStream.close();
}
// 也可以使用这个hutool的IoUtil.close方法,里面封装了判断和关流方法,代码看起来要简洁很多
//IoUtil.close(baos);
IoUtil.close(bis);
IoUtil.close(fileInputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Java IO字节流读取文件学习记录
最新推荐文章于 2024-04-03 15:11:06 发布
本文详细介绍了Java中两种文件读取方式:基本的FileInputStream读取和高效的FileInputStream与BufferedInputStream结合使用。通过示例代码展示了如何利用缓冲提高读取效率,并提供了异常处理和资源关闭的方法。
1502

被折叠的 条评论
为什么被折叠?



