IO字节流

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,"、
i'am java
多	多	关	照");*/
    }

    //写入字符串的方法
    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));//将读到的多个字节数据按字符串格式输出
  }
原文地址:https://www.cnblogs.com/susexuexi011/p/13944381.html