JAVA中常用的IO流

一、什么是IO流?

        I:Input    O:Output

        通过IO可以完成对硬盘文件的读和写,Java中使用流的概念来加快I/O操作的速度。

        java.io软件包包含输入和输出操作所需的所有类。

二、什么是流?

        Stream是数据序列。在Java中,流由字节组成。之所以称其为流,是因为它就像不断流动的水流一样。

三、IO流的分类?

        输入流、输出流、字节流、字符流

        在java中只要“类名”以Stream结尾的都是字节流。以“Read/Writer”结尾的都是字符流。

       (1)按照流的方向分类,以内存作为作为参照物。

                往内存中去,叫做输入(Input/Read)

                从内存出来,叫做(Output/Write)

       (2)按照字节的方式读取数据,一次读取一个字节,可以读取任何类型的文件,包括:文本、图片、音频、视频。

       (3)按照字符的方式读取数据,一次读取一个字符,只能读取纯文本文件,不能读取除文本文件之外的文件。

四、常用的IO流

        1、FileInputStream

        2、FileOutputStream  

 1、FileInputStream

        在java.io包下,继承于java.io.InputStream,因为所有的流都在java.io.*包下,所以通过查看API文档直接创建文件输入流对象。创建对象的时候需要进行对异常的捕捉。

FileInputStream fis = new FileInputStream("D:/Users/cwy/Desktop/JAVA/流/temp.txt");

对异常进行捕捉如下:

FileInputStream fis = null;
        try {
            // 创建文件字节输入流对象
             fis = new FileInputStream("D:/Users/cwy/Desktop/JAVA/流/temp.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) { // 避免空指针异常!
                // 关闭流的前提的是:流不是空。流是null的时候没有必要关闭。
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

读取文件内容:一次读取一个字节,内存和硬盘的交互太过频繁,不利于资源的利用。

             // 开始读
            int readData = fis.read(); // 这个方法的返回值是:读取到的“字节”本身。
            System.out.println(readData); // 97

改进:如果等于-1表示读到文件的末尾了,已经读不到任何数据了;则循环终止。

            int readData = 0;
            while((readData = fis.read()) != -1){
                System.out.println(readData);
            }

为了较少内存与硬盘的交互,采用byte数组的方式,一次读取多个字节(<=数组.length)。

这里调用了String类的构造方法:

构造方法参数:

                        将读取的数据存入byte数组转化成字符串

            int readCount = 0;
            while((readCount = fis.read(bytes)) != -1){
                System.out.print(new String(bytes,0,readCount));
            }

 1.1FileInputStream的方法

 

文件内容如下:

调用available()方法

            System.out.println("总字节数量:" + fis.available()); // 6
            int readByte = fis.read();
            System.out.println("剩下多少个字节没有读:" + fis.available()); // 5

结果: 

 

调用skip()方法 

            fis.skip(3);
            System.out.println(fis.read());

 返回结果是字符对应的ASCII码

 

  2、FileOutputStream  

构造方法:

        FileOutputStream fos = new FileOutputStream("D:/Users/cwy/Desktop/JAVA/流/HelloWorld.txt",true);
            // 以追加的方式在文件末尾写入。不会清空原文件内容。

向文件中写数据的方法: 

 

 准备文件(空): 

写的第一种方式: 

            //字符串
            String s = "我是一个程序员";
            // 将字符串转换成byte数组。
            byte[] bytes1 = s.getBytes();
            // 写
            fos.write(bytes1);

成功写入: 

写的第二种方式:  


            // 开始写
            byte[] bytes = {97,98,99,100};
            // 将byte数组全部写出!
            fos.write(bytes);
            fos.write(bytes,0,2);

            // 写完之后,最后一定要刷新
            fos.flush();

追加写入成功: 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值