20.4 字节输入流:

20.4.1 InputStream类的常用方法

  1. available() 方法,获取与之关联的文件的剩余可读字节数(返回int值,文件很容易超出int范围,所以很少用)。

  2. int read() 方法,读取输入流。读取输入流的下一个字节,返回一个0-255之间的int类型整数。如果到达流的末端,返回-1。

  3. int read(byte[] b) 方法,读取输入流。读取多个字节,存入字节数组b,返回实际读入(不一定就是b.length个)的字节数。如果到达流的末端,返回-1。

  4. int read (byte[] b, int off, int len); 方法,读取输入流。每次读取len个字节,存入字节数组b,从off下标开始存储,返回实际读入的字节数。如果到达流的末端,返回-1。

  5. close() 方法,关闭当前流,释放与该流相关的资源,防止资源泄露。在带资源的try语句中将被自动调用。关闭流之后还试图读取字节,会出现IOException异常。

    //笔记;
    //jdk1.7以后:在带资源的try语句中将被自动调用close();
    try(InputStream is = new FileInputStream(File)){  
    }catch(IOException e){
        e.printStackTrace();
    }
    //jdk1.7以前:自己关闭流
    InputStream is = null;
    try{
      is = new FileInputStream(File);
    }catch(IOException e){
        e.printStackTrace();
    }finally{
      try{
        if(is!=null){
          is.close();
          is=null;
        }  
      }catch(IOException e){
        e.printStackTrace();
      }
    }
    

20.4.2 InputStream类的子类:文件输入流FileInputStream

FileInputStream 用于读取本地文件中的字节数据,继承自InputStream类

20.4.2.1 FileInputStream构造方法和常用方法

20.4.2.1.1构造方法
  1. FileInputStream(File file); 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

  2. FileInputStream(String name); 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名 name 指定。

20.4.2.1.2 常用方法
  1. read() 方法,读取输入流。读取输入流的下一个字节,返回一个0-255之间的int类型整数。如果到达流的末端,返回-1。

    is = new FileInputStream("test.txt");  
    int i; 
    while ((i = is.read()) != -1) {
        System.out.println("out: " + (char)i);  
    }
    
  2. read(byte[] b) 方法,读取输入流。读取多个字节,存入字节数组b,返回实际读入的字节数。

    InputStream is = null;  
    byte[] buffer = new byte[4];//每次读取4个字节
    try {
        is = new FileInputStream("test.txt");  
        is.read(buffer);  
        System.out.println("available: " + is.available());//观察在读取的过程中,available 值。
        for (byte b : buffer) {  
            System.out.println((char)b);  
        }
    }...
    

  3. read (byte[] b, int off, int len); 方法,读取输入流。每次读取len个字节,存入字节数组b,从off下标开始存储。

  4. close() 方法,关闭当前流,释放与该流相关的资源,防止资源泄露。在带资源的try语句中将被自动调用。关闭流之后还试图读取字节,会出现IOException异常。

  5. skip(long n) 方法,跳过(放弃)当前流的n个字节,返回实际跳过的字节数。

20.5 字节输出流:

20.5.1 OutputStream类的常用方法

  1. write (int b); 将指定的字节写入此输出流。

  2. write(byte[] byte); 将 b.length 个字节从指定的 byte 数组写入此输出流。

  3. write(byte[] byte, int off, int len); 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

  4. flush(); 用于清空缓存里的数据,并通知底层去进行实际的写操作。(强制把缓存区里面的数据写入到文件)

  5. close();关闭当前流,释放与该流相关的资源。

20.5.2 OuputStream类的子类:文件输出类FileOutputStream

提供了文件的基本写入能力,继承自 OuputStream类

注意:

  1. 如果进行写操作的文件不存在,则自动创建该文件。

  2. 如果文件所在的路径也不存在则报错。

20.5.2.1 FileOutputStream构造方法和常用方法

20.5.2.1.1 构造方法
  1. public FileOutputStream(String name); 通过打开一个到实际文件的连接来创建一个FileOutputStream,该文件通过文件系统中的路径名 name 指定。默认写入内容会覆盖原文件内容。

  2. public FileOutputStream(String name,boolean append);通过打开一个到实际文件的连接来创建一个FileOutputStream,该文件通过文件系统中的路径名 name 指定。如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。

  3. public FileOutputStream(File file):通过打开一个到实际文件的连接来创建一个FileOutputStream,该文件通过文件系统中的 File 对象 file 指定。 默认写入内容会覆盖原文件内容。

  4. public FileOutputStream(File file,boolean append);通过打开一个到实际文件的连接来创建一个FileOutputStream,该文件通过文件系统中的 File 对象 file 指定。如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。

20.5.2.1.1 常用方法
  1. write (int b); 将指定的字节写入此输出流。

    try {
        File file = new File("test.txt");
        OutputStream fos = new FileOutputStream(file);
        byte b = 'a';
        fos.write(b);
        fos.flush();
        fos.close();
    }...
    

    结果:

  2. write(byte[] byte); 将 b.length 个字节从指定的 byte 数组写入此输出流。

    try {
        File file = new File("test.txt");
        OutputStream fos = new FileOutputStream(file);
        byte b[]= "abcdefg".getBytes();
        fos.write(b);
        fos.flush();
        fos.close();
    }...
    

    结果:

  3. write(byte[] byte, int off, int len); 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

    try {
        File file = new File("test.txt");
        OutputStream fos = new FileOutputStream(file);
        byte b[]= "abcdefg".getBytes();
        fos.write(b,1,3);
        fos.flush();
        fos.close();
    }...
    

    结果:

  4. flush(); 用于清空缓存里的数据,并通知底层去进行实际的写操作。(强制把缓存区里面的数据写入到文件)

  5. close();关闭当前流,释放与该流相关的资源。

results matching ""

    No results matching ""