• IO字节流(2)


    读取字节数据

    读取数据的原理(硬盘-->内存)

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

    字节输入流的使用步骤(重点)

    1. 创建FileInputStream对象,构造方法中绑定要读取的数据源。
    2. 使用FileInputStream对象中的方法read,读取文件。
    3. 释放资源。

    代码演示:

    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class Demo01 {
        public static void main(String[] args) throws IOException {
            //创建一个对象
            FileInputStream input = new FileInputStream("C:\a\b.txt");
            //使用read方法读取数据。
    //        int s = input.read();
    //        System.out.println(s);
    
            //使用循环读取文件全部内容。
            int len = 0;
            while ((len = input.read()) != -1){
                System.out.println(len);
            }
            //释放资源
            input.close();
        }
    }
    

    布尔表达式(len = input.read())!=-1

    1. input.read():读取一个字节。
    2. len = input.read():把读取到的字节赋值给变量len。
    3. (len = input.read())!=-1:判断变量len是否不等于-1。

    字节流一次读取多个字节

    字节输入流一次读取多个字节的方法:

    ​ int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

    明确两件事:

    1. 方法的参数byte[]的作用?
    2. 方法的返回值int是什么?

    String类的构造方法

    ​ String(byte[] bytes):把字节数组转换为字符串。

    ​ String(byte[] bytes,int offset, int length):把字节数组的一部分转化为字符串offset:数组的开始索引 length:转换的字节个数。

    代码演示:

    package day6;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Arrays;
    
    public class Demo02 {
        public static void main(String[] args) throws IOException {
            //创建FileInputStream对象,构造方法中绑定要读取的数据源。
            FileInputStream fis = new FileInputStream("C:\a\b.txt");
            //使用FileInputStream对象中的方法read读取文件。
            //int read(byte[] b) 从输出流中读取一定数量的字节,并将其存储在缓冲区数组b中。
            byte[] bytes = new byte[2];
            int len = fis.read(bytes);
            System.out.println(len);
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes));
            //释放资源
            fis.close();
        }
    }
    

    发现以上读取时有一个重复的过程,可以使用循环有话,不知道文件中有多少个字节,所以使用while循环,while循环结束的条件,读取到-1结束。

    package day6;
    
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class Demo03 {
        public static void main(String[] args) throws IOException {
            FileInputStream fis = new FileInputStream(new File("C:\a\b.txt"));
            byte[] bytes = new byte[1024];
            int len;
            while((len = fis.read(bytes))!=-1){
                System.out.println(new java.lang.String(bytes,0,len));
            }
        }
    }
    

    练习:文件复制

    目的:把一个文件复制到另外一个地方。

    原理:其实就是读取一个文件,然后将其写入到另外一个地方。

    代码演示:

    package day6;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class lianxi01 {
        public static void main(String[] args) throws IOException {
            FileOutputStream fis = new FileOutputStream("C:\a\b\e.txt");
            FileInputStream fis2 = new FileInputStream(new File("C:\a\b.txt"));
    //        int len;
    //        while((len = fis2.read())!=-1){
    //            fis.write(len);
    //        }
    
            //使用数组缓冲读取多个字节,写入多个字节。
            byte[] bytes = new byte[1024];
            int len;
            while((len = fis2.read())!=-1){
                fis.write(bytes,0,len);
            }
            
            fis.close();
            fis2.close();
        }
    }
    
  • 相关阅读:
    many2many
    oneselfone
    one2one
    10-many2one
    08-one2many
    05-curd
    动态SQl
    文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
    expect用法举例
    通过命令修改mysql的提示符
  • 原文地址:https://www.cnblogs.com/Xiaoming0/p/13939712.html
Copyright © 2020-2023  润新知