顾乔芝士网

持续更新的前后端开发技术栈

FileInputStream详解

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就没有设计这种无意义的逻辑,文件不存在就直接报错了。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言