第一排全是抽象类,第二排是他们各自对应的实现类。
FileInputStream(文件字节输入流)
● 作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。
如何创建字节输入流管道和源文件接通
注意点
1、new File可以省略
2、可以不用绝对路径,可以用相对路径
// 1、创建一个文件字节输入流管道与源文件接通
FileInputStream is = new FileInputStream(new File("D:\\code\\javaseprojectaimax\\day03-file-io\\src\\dlei02.txt"));
FileInputStream is2 = new FileInputStream("day03-file-io\\src\\dlei02.txt");//简便写法
如何读取字节
每次读取一个字节的方法
//2、开始读取文件中的字节并输出 每次读取一个字节
int b; //仅仅申明了变量,如果未手动赋值,则会默认赋值int类型的默认值 0
while((b = is2.read()) != -1){
System.out.print((char) b); //将字节转成字符
}
每次读取多个字节的方法
byte[] buffer = new byte[3];
// 定义一个变量用于记住每次读取了多少个字节
int len;
while ((len = is2.read(buffer)) != -1){
//这行代码有两个动作:1、尝试读取字节,并储存到buffer数组中 2、返回每次读取的字节数
// 3、把读取到的字节数组转换成字符串(读取多少倒出多少),并输出
String str = new String(buffer,0,len);//0表示从第一个元素(字节)开始读
System.out.print(str);
}
注意点:while ((len = is2.read(buffer)) != -1){ }
这行代码有两个动作:1、尝试读取字节,并储存到buffer数组中 2、返回每次读取的字节数
问题:可能导致读取汉字乱码的问题。 解决方案:1、创建和文件大小一样的数组 2、调用readAllBytes方法
readAllBytes方法(一次性读取全部字节)
// 1、创建一个文件字节输入流管道与源文件接通
FileInputStream is = new FileInputStream("day03-file-io\\src\\dlei04.txt");//简便写法
//2、一次性读取文件中的所有字节:调用readAllBytes方法。
//可以避免读取汉字乱码问题,但是如果读取文件内容过大,可能导致内存溢出
byte[] bytes = is.readAllBytes();
System.out.println(new String(bytes));
注意点
可以避免读取汉字乱码问题,但是如果读取文件内容过大,可能导致内存溢出