当前位置 博文首页 > 文章内容

    IO字节流

    作者: 栏目:未分类 时间:2020-11-08 15:00:15

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    IO概述:

    I:Inuput输入(从硬盘读取文件到内存);

    O: Output输出(将数据从内存写入硬盘);

    流:一种写入数据的抽象方式,是有方向的

     

     

    顶层父类:

          输入流     输出流

    字节流   InputStream   OutputStream

    字符流   Reader       Writer

     

    字节流

    一切文本数据在存储时,都以二进制形式保存(以字节为单位),传输时一样如此,所以字节流可以传输任意文件数据。在操作流时,无论使用什么流对象,底层传输始终为二进制数据。

    字节输出流

    java.IO.OutputStream(是一个抽象类)

    一个常用子类:FileOutputStream(文件字节输出流)

    作用:把内存中的数据写入硬盘文件

    子类构造法方法

    1.FileOutputStream(String name)(目的地是一个文件路径)

    2.FileOutputStream(File file) (目的地是一个文件)

    参数:写入文件的目的地 构造方法的作用:

    1.创建FileOutputStream对象

    2.根据构造方法中传递的文件/文件路径,创建一个空文件

    3.把对象指向创建好的文件

    写入数据的原理: java程序->JVM->OS->OS调用写数据的方法->把数据写入文件

    使用步骤:

    1.创建一个FileOutputStream对象,构造方法传递数据写入目的地

    2.调用FileOutputStream对象的write方法,把数据写入文件

    3.释放资源(调用close方法) (流使用会占用一定的内存,使用完毕以后清空内存,提高效率)

    // 文件存储原理和记事本打开文件

    硬盘中存储的数据都是二进制,任意的文本编辑器在打开文件时会查询编码表,把字节转化为字符表示 0-127:查询ASCII编码表 其他值:查询系统默认编码表

    数据的续写

    FileOutputStream类的构造方法

    FileOutputStream(String pathname ,boolean append), FileOutputStream(File file ,boolean append)

    参数boolean append 是追加开关

    true: 创建对象不会创建文件,在源文件后追加写入数据

    flase: 覆盖原文件

    代码学习

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class DemoByte02 {
        public static void main(String[] args) throws IOException {
            File file = new File("Month"+File.separator+"src"+File.separator+
                                "LearnIO"+File.separator+"write1.txt");
            //相对文件路径
           
            FileOutputStream fos =new FileOutputStream(file);
            byte[] bt={97,98,99};
            fos.write(bt);
            fos.flush();
            fos.close();
            //writestr(fos,"hellow,world");
            //在源文件后追加写入数据
            /*File file = new File("Month"+File.separator+"src"+File.separator+
                    "LearnIO"+File.separator+"write.txt");
         FileOutputStream fos =new FileOutputStream(file,true);
            writestr(fos,"、\r\ni'am java\r\n多\t多\t关\t照");*/
        }
    
        //写入字符串的方法
        public static void writestr(FileOutputStream fos,String str) throws IOException {
            byte[] bt = str.getBytes();
            //将字符串转化为字节数组
            fos.write(bt);
            fos.flush();;
            fos.close();
        }
    }

    字节输入流InputStream

    其一个子类:FileInputStream(文件字节输入流)

    作用:把硬盘数据文件读取到内存中

    构造方法

    FileInputStream(String pathname);FileInputStream(File file)

    参数:读取文件数据源

    作用:

    1.创建FileInputStream对象

    2.把该对象指向构造方法要读取的文件

    读取数据的原理 java程序->JVM->OS->OS读取数据的方法->读文件

    使用步骤

    1.创建一个FileInputStream对象,构造方法传递数据读取目的地

    2.调用FileInputStream对象的read方法,读取数据

    3.释放资源(调用close方法)

    代码练习

    public static void main(String[] args) throws IOException {
          File file = new File("Month"+File.separator+"src"+File.separator+
                  "LearnIO"+File.separator+"write1.txt");
          FileInputStream fis =new FileInputStream(file);
    //read方法:int read();返回值为读到的数据,读完数据返回-1
          //int read(byte[] byte);int read(byte[] byte,int off,int,len);
          //一次读取多个数据,返回值为读到的有效字节数,读完数据返回-1
    
          byte[] bt=new byte[3];
          int a= fis.read(bt);//会把读到的数据存入传入的字节数组
          System.out.println(a);
          //System.out.println(fis.read());
          System.out.println(new String(bt));//将读到的多个字节数据按字符串格式输出
      }