FileInputStream
操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。
书写步骤:
①创建字节输入流对象
②读取数据
③释放资源
public static void main(String[] args) throws IOException {
/**
* 演示:字节输入流FileInputStream
* 实现需求:读取文件中的数据。(暂时不写中文)
*
* 实现步骤:
* 创建对象
* 读取数据
* 释放资源
*/
// 1、创建对象
FileInputStream fis = new FileInputStream("E:\\JavaLearn\\IoStream\\c.txt");
// 2、读取数据
int read1 = fis.read();
// 输出结果强转为char类型
System.out.println((char)read1);
int read2 = fis.read();
System.out.println((char)read2);
int read3 = fis.read();
System.out.println((char)read3);
// 3、释放资源
fis.close();
}
FileInputStream原理
// 1、创建对象
FileInputStream fis = new FileInputStream("E:\\JavaLearn\\IoStream\\c.txt");
创建字节输入流原理:对象一旦创建完毕之后,程序和本地文件之间就会创建一个数据传输的通道。
// 2、读取数据
int read1 = fis.read();
// 输出结果强转为char类型
System.out.println((char)read1);
读取数据原理:把本地文件中的数据读取到程序中。
// 3、释放资源
fis.close();
释放资源原理:把通道给砸了。
FileInputStream的书写细节
①创建字节输入流对象
细节:如果文件不存在,就直接报错。
// 1、创建对象
FileInputStream fis = new FileInputStream("E:\\JavaLearn\\IoStream\\ce.txt");
②读取数据
细节一:一次读一个字节,读出来的数据在ASCII上对应的数字
int read = fis.read();
System.out.println(read);
int read2 = fis.read();
System.out.println(read2);
int read3 = fis.read();
System.out.println(read3);
int read4 = fis.read();
System.out.println(read4);
int read5 = fis.read();
System.out.println(read5);
细节二:读到末尾了,read方法返回-1
细节三:如果末尾是空格或者-1,读取的是空格在ASCII对应的数字,-1读取的是-和1
③释放资源
细节:每次使用外流必须要释放资源。
程序中最重要的是:数据。
字节输入流循环读取
// 1、创建对象
FileInputStream fis = new FileInputStream("E:\\JavaLearn\\IoStream\\ccc.txt");
// 2、读取数据
int b;
while((b = fis.read())!= -1){
// System.out.print(b);
System.out.print((char) b);
}
// 3、释放资源
fis.close();
为什么需要设置一个变量b呢,如果不设置变量b,是否可以读取全部文件呢
// 1、创建对象
FileInputStream fis = new FileInputStream("E:\\JavaLearn\\IoStream\\ccc.txt");
// 2、读取数据
int b;
while((fis.read())!= -1){
// System.out.print(b);
System.out.print((char) fis.read());
}
// 3、释放资源
fis.close();
从上面的输出结果来看,没有设置一个变量是不能读取到全部数据的,原因是因为我们每一次循环都进行了两次读取,所以输出的结果是从第二个数据开始输出,然后隔一个数据继续输出下一个数据。
关于输出流和输入流没有这个文件时创建还是报错的原因总结:为什么输出流如果文件不存在就创建文件把数据写入到文件当中呢,而输入流文件不存在,就直接报错呢?原因:因为输入流创建出来的而文件是没有数据的,没有任何意义的。所以Java就没有设计这种无意义的逻辑,文件不存在就直接报错了。