字节流读数据(一次读一个字节数组数据)
1.需求: 把文件fos.txt中的内容读取出来在控制台输出
2.思路:
- 创建字节输入流对象
- 调用字节输入流对象的读数据方法
- 释放资源
package com.bytestream;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo02 {
public static void main(String[] args) throws IOException {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("基础语法\\fos.txt");
//int read(byte[] b):从该输入流读取最多 b.length个字节的数据到一个字节数组
byte[] bys=new byte[5];
//第一次读取数据
int len = fis.read(bys);
System.out.println(len);
//String (byte[] bytes)
System.out.println(new String(bys));
//第二次读取数据
len = fis.read(bys);
System.out.println(len);
//String (byte[] bytes)
System.out.println(new String(bys));
//第三次读取数据
len = fis.read(bys);
System.out.println(len);
System.out.println(new String(bys));
fis.close();
}
}
一次读取5个字节的数据,第一次读取到的字节长度为5,数据为hello;第二次读取到字节长度为5,因为hello和world之间有换行\r\n,所以第二次读取到数据为\r\nwor,控制台输出的结果是一个换行和wor;第三次读取到字节为2,使用ld替换掉第二次\r\n两个字节,因为第二次的读取到的字节长度为5,所以也得替换5个字节,\r\n还需要把wor加上。注意这里的len输出的并不是数组的长度,而是每次读取到实际数据的字节长度。
循环改进读数据
package com.bytestream;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo02 {
public static void main(String[] args) throws IOException {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("基础语法\\fos.txt");
//循环改进
byte[] bys=new byte[1024];//1024及其整数倍
int len;
while ((len=fis.read(bys))!=-1){
System.out.print(new String(bys,0,len));
}
fis.close();
}
}