Io流字节输出输入


IO流的分类

1.从磁盘读取数据到内存(Java代码) 磁盘=》代码中 输入流

2.从内存(Java代码 String str = "狗蛋很帅")写入数据到磁盘某一个文件 代码=》磁盘 输出流

参照物:是内存,就是Java代码。

输入流: 从磁盘读取到内存

输出流:从内存写入到磁盘

I:

input: 输入 从磁盘读取数据到内存

使用input输入流的应用场景是啥:比如 磁盘上面有一个1.txt文件,将1.txt文件的内容读取到Java内存中。使用的是输入流。

输入流分为两种:

1.字节输入流 FileInputStream

2.字符输入流

输出流分为两种:

1.字节输出流 FileOutputStream

2.字符输出流

字节输入流

 public static void main(String[] args) throws IOException {
        //将磁盘上面的c:/aaa/1.txt文件这个数据读取到内存(Java)中
        //加上缓冲的效果,这种很牛逼啊,将磁盘上面的东西弄到咱们Java代码中
        //1.创建File对象,是咱们本地磁盘文件的一个File对象
        //为啥要创建这个File对象?因为要读取1.txt这个文件的里面的
        //内容,首先先找到文件再说啊。
        File file = new File("c:/aaa/1.txt");
        //2.创建文件字节输入流对象,来操作1.txt
        //FileInputStream(File file)
        //通过打开与实际文件的连接创建一个 FileInputStream ,
        // 该文件由文件系统中的 File对象 file命名。
        //将c:/aaa/1.txt文件转为字节输入流的形式,之后可以按照流的形式读取到内存中
        FileInputStream fis = new FileInputStream(file);
        //3.fileInputStream 这个流不具备缓冲的效果。
        //但是加上缓冲的效果!!! 咋办?使用另外一个流
        //BufferedInputStream
        //A BufferedInputStream为另一个输入流添加了功能,即缓冲输入
        //咋加?将FileInputStream传给BufferedInputStream 此时
        //FileInputStream  就具备缓冲的功能了!!!
        BufferedInputStream bis = new BufferedInputStream(fis);
        //使用字节缓冲流操作咱们的1.txt
        //当创建BufferedInputStream时,
        // 将创建一个内部缓冲区数组,这个数组是什么数据类型的?
        //5.创建一个缓冲区的数组  byte  为啥是byte类型的数组
        //因为是字节输入流  所以是byte  byte 就是字节
        //当缓冲数组是2个字节的时候,每次读取的时候存到缓冲数组中,只存2个字节
        //发现数据一次性读取不完?咋办?咋解决?
        byte[] buf = new byte[1024 * 4];//缓冲区4096字节
        //现在数组是空的
        //6.读取数据
        //public int read(byte[] b)
        //         throws IOException
        //从输入流读取一些字节数,并将它们存储到缓冲区b 。
        // 实际读取的字节数作为整数返回
        //将1.txt文件的内容 读取到缓冲数组中  buf 里面
        //之前buf是一个空的数组,现在通过read方法将1.txt文件中的
        //内容读取到了 buf空的数组中
//        int read = bis.read(buf);
//        System.out.println(read);
        //6.调用read方法之后,buf 数组就有值了 能不能打印一下
        //借助于String类来展示byte数组的内容
        //buf  给字符串  为了展示字节数组中的内容的
        //0 偏移量   buf这个数组中从哪开始取值  从下标为0 的地方取值
        //read  取6个
        //如果b的长度为零,则不会读取字节并返回0 ;
        // 否则,尝试读取至少一个字节。
        // 如果没有字节可用,因为流在文件末尾,则返回值-1
        int length = -1;
        //如果length=-1  那么就会到达流的末尾  就证明后面没哟数据
        //循环结束,不要再读了
        while ((length = bis.read(buf)) != -1) {
            //循环4次
            System.out.println("狗蛋");
            //数组中的东西要展示出来  使用String
            //将磁盘上面的内容 读取到 =》 内存  buf
            System.out.println(new String(buf, 0, length));
        }
        //7.流是需要关闭的
        bis.close();
        fis.close();

    }
}

字节输出流

   public static void main(String[] args) throws IOException {
        //将Java代码中的一个字符串写入到咱们的磁盘的某一个文件中
        //1.创建File对象,文件路径对象  告知编译器要把数据写到哪个文件中
        File file = new File("c:/aaa/2.txt");
        //2.实例化字节输出流对象
        FileOutputStream fos = new FileOutputStream(file);
        //3.对FileOutputStream  加上缓冲的效果
        //猜测一下  FileInputStream所对应的缓冲流  BufferedInputStream
        //FileOutputStream  所对应的缓冲流  BufferedOutputStream
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //4.将一个字符串写入到磁盘中
        String str = "大家再等我一天,后天见面!!!";
        //    write(byte[] b)
        //咱们的参数是字节数组,咋办?str是一个字符串 但是参数是一个字节数组,咋解决?
        //str是字符串 不能强转  将字符串转为字节数组,没有讲过!!!
        //将str字符串转为字节数组
        byte[] bytes = str.getBytes();
        bos.write(bytes);
        //5.写完以后一定要刷新流然后关闭流
        bos.flush();//没有实际的意义,可以不写的
        //6.关闭流
        //在输入流的时候一定是先开的后关,后开的先关
        bos.close();
        fos.close();


    }
}

你可能感兴趣的:(java)