美文网首页
I/O流笔记

I/O流笔记

作者: 白桦树97 | 来源:发表于2019-07-14 12:24 被阅读0次

一: 万物皆字节

  • 一切文本、图片、视频都是以二进制进行储存,都是一个个字节,所以字节流可以传输任何文件。
  • 文本编辑器: 都是将二进制查表,将字节转化成字符 ,其中0-127查ASCII表,其它查GBK表。
  • InputStream 和 OutputStream 都是抽象类,不可以创建,所以要选取其子类这里使用File子类
    二:写文件
//若追加,则构造方法第二个参数为true
 FileOutputStream fos = new FileOutputStream("/Users/haogege/Desktop/a.txt",true);
//写入a
 fos.write(97);
//写入abcd
 byte[] b = {97,98,99,100};
 fos.write(b);
//写入bc
fos.write(b,1,2);
//写入换行符
fos.write("\r\n".getBytes());
//写入我爱你
byte[] b = "我爱你".getBytes();
fos.write(b);
//关闭流
fos.close();

三:读文件 (读比较神奇,读完指针会向后移动一位)

  1. 一次读出一个字节,若没有则返回-1
 FileInputStream fis = new FileInputStream("/Users/haogege/Desktop/a.txt");
        int len = fis.read();
        System.out.println(len);
        len = fis.read();
       //将一个字节转化为char
        System.out.println((char)len);
        len = fis.read();
        System.out.println(len);
  1. 循环一次读出一个
 int len = 0;
 while((len = fis.read())!=-1){
         System.out.println(len);
  }

注意:若存入一个汉字“我”,则会读出多个字节 230 136 145 (GBK编码 2个字节,utf-8 三个字节)

  1. 一次读取多个 (指针一次移动多位)
FileInputStream fis = new FileInputStream("/Users/haogege/Desktop/a.txt");
        byte[] b = new byte[2];
        int len = fis.read(b);
        System.out.println(Arrays.toString(b));
       //骚操作
        System.out.println(new String(b));

注意:读取多个到b缓冲区. 这里的len指的是读了几个字节
4.最佳方案。

        byte[] b = new byte[1024]; 
        int len = 0;
        while((len= fis.read(b))!=-1){
//如果不加 0 和len 也没毛病,就是byte数组后面会有一堆空的
            System.out.println(new String(b,0,len));
        }

5.复制文件。

FileInputStream fis = new FileInputStream("/Users/haogege/Desktop/a.txt");
        FileOutputStream fos = new FileOutputStream("/Users/haogege/Desktop/b.txt");
        byte[] b = new byte[2];
        int len = 0;
        while((len= fis.read(b))!=-1){
            fos.write(b,0,len);
        }
       fis.close();
       fos.close();

6.使用字节流存在的小问题。

 FileInputStream fis = new FileInputStream("/Users/haogege/Desktop/a.txt");
        int len = 0;
        while((len= fis.read())!=-1){
            System.out.println((char)(fis.read()));
        }
        fis.close();

7.使用字符流。(以字符的形式读写)

抽象类 Writer和Reader 使用子类 File,

  • 与字节流不太一样的是会将数据先写到缓冲区。
FileWriter fis = new FileWriter("/Users/haogege/Desktop/a.txt");
        fis.write(97);
        fis.flush();
        fis.write(88);
        fis.close();

注:flush和close()的区别。
- 均可将数据从缓冲区刷到硬盘
- close使用后流不可以再使用。

  1. 写入char数组,和字符串
        char[] a = {'a','b','c'};
        fis.write(a);
        fis.flush();
        fis.write("我爱你");
        fis.close();

未完待续。。 properties加载和buffer

相关文章

  • I/O流笔记

    一: 万物皆字节 一切文本、图片、视频都是以二进制进行储存,都是一个个字节,所以字节流可以传输任何文件。 文本编辑...

  • java基础-I/O流

    知识点 I/O流的基本知识 I/O流中常用流的关系 I/O流之FileInputSrteam,FileOutput...

  • Java-I/O流

    总结 I/O流分类 按照操作单元划分,字节I/O系统和字符I/O系统。 按照流的流向分,可以将流分为输入流和输出流...

  • I/O流

    java常见的I/O流

  • I/O流

    输入输出流 Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.i...

  • I/O流

    2.1、线程池 理解为容器,装有预先创建好的线程,执行任务。执行后归还给线程池等待下次分配任务。为了降低程序的开销...

  • Java中的I/O流

    谷歌I/O大会,现在赶一下时髦,在这里说一下Java的I/O流。I/O流可以简单的理解input/output流,...

  • Java-10 I/O流

    I/O流全称是Input/Output Stream,译为输入输出流 I/O流常用的类型都在java.io包中 类...

  • 流?I/O操作?阻塞?epoll?

    一、流?I/O操作? 阻塞? (1) 流 可以进行I/O操作的内核对象 文件、管道、套接字…… 流的入口:文件描述...

  • I/O流的热点问题

    I/O的框架 I/O流包括字节流和字符流字节流包括字节输入流InputStream和字节输出流OutputStre...

网友评论

      本文标题:I/O流笔记

      本文链接:https://www.haomeiwen.com/subject/pippkctx.html