字节输入流(FileInputStream)

字节输入流

FileInputStream继承InputStream,所有后缀为InputStream的类都属于字节输入流

做字节输入流的步骤:

1.铺设管道

2.确保有水厂,水厂里面有数据

3.打开水龙头,fis.read()

对输入流的理解:

FileInputStream相当于一个管道,他的构造方法里面的参数相当于水厂,水厂里面有水(数据)

如果不确定一个文件是否存在或者一个文件里面是否有数据,就使用FileInputStream中参数为File类型的构造方法,通过判断File对象是否存在文件(file.exiats())并且判断该文件里面是否有数据(file.length())来铺设管道,也就是创建管道对象,如以下代码:

            File f = new File("H:\\IO流实验\\test.txt");
            if (f.exists()&&f.length()>0) {
                FileInputStream fis1 = new FileInputStream(f);
            }

注意:当文件中包含中文的时候,出现乱码是因为管道的read()方法是从输入流中一个一个读取字节,一个中文在gbk编码表里代表2个字节,也就是read()方法读完半个中文(一个字节)就输出了,从而造成乱码

代码实现输入流应用

public class Test {
    public static void main(String[] args) {
        try {
            //铺设管道方法一:(FileInputStream构造方法是传入File类型的参数,
            // 当不知道该文件是否存在,是否有数据的时候使用
            /*
            File f = new File("H:\\IO流实验\\test.txt");
            if (f.exists()&&f.length()>0) {
                FileInputStream fis1 = new FileInputStream(f);
            }
             */

            //1在文件和程序之间铺设管道(FileInputStream)
            FileInputStream fis2 = new FileInputStream("H:\\IO流实验\\test.txt");
            //2开水龙头(fis.read())一个一个字节的读,
            //乱码原因:
            // 因为一个中文在gbk编码中占2个字节,read()是一个一个字节读取,所以中文读了一半就输出了,造成乱码
            int ch = 0;
            while ((ch = fis2.read())!=-1){
                System.out.print((char)ch);
            }
            //3关水龙头(关闭流)
            fis2.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(JavaSE)