13.IO流 使用

IO流实例

一、java IO流的概念

java的io是实现输入输出的基础,可以方便实现数据的输入和输出操作。在Java中将不同的输入/输出源抽象表述为”流“(stream)。

二、IO流的分类

  1. 按照流向可分为输入流和输出流
  2. 按照操作单元划分,可分为字节流和字符流
  3. 按照流的角色可分为节点流和处理流

三、IO流实现

  • 字节流FileInputStream/FileOutputStream
//拷贝数据
public void copyFile(){
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream("D://a.txt");		//创建输入流
        os = new FileOutputStream("C://Users/hong/Desktop/java学习笔记/a.txt");	//创建输出流
        byte[] buffer = new byte[1024];		//字节定义容器来装信息
        int len;
        if ((len = is.read(buffer)) != -1){	//读取获取的信息,并判断是否不为-1
            os.write(buffer, 0, len);		//将获取的信息写入,0代表从第0个开始写入,写入冷个长度
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (is != null){
            try {
                is.close();		//使用完必须关上,不然会占用内存
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (os != null) {
            try {
                os.close();		//使用完必须关上,不然会占用内存
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

//字节流读取文件内容
    public void readFile() throws Exception{
        FileInputStream is = new FileInputStream("D://a.txt");
        byte[] buffer = new byte[16];		//定义字节数组
        int len;
        while ((len = is.read(buffer)) != -1) {
            String s = new String(buffer, 0, len);
            System.out.println(s);
        }
        is.close();
    }
//写入数据
    public void writeFile() throws Exception{
        FileOutputStream fileOutputStream = new FileOutputStream("D://a.txt");
        String str = "我是机器人";
        fileOutputStream.write(str.getBytes());

        fileOutputStream.flush();		//清空缓冲区
        fileOutputStream.close();
    }
  • 字符流FileReader/FileWriter
//字节流读取文件内容
    public void readFile() throws Exception{
        FileReader reader = new FileReader("D://a.txt");
        char[] buffer = new char[1024];		//定义字符数组
        int len;
        while ((len = reader.read(buffer)) != -1) {
            String s = new String(buffer, 0, len);
            System.out.println(s);
        }
        reader.close();
    }
//写入数据
    public void writeFile() throws Exception{
        FileWriter reader = new FileWriter("D://a.txt",true);	//append=true,意思是可以追加内容
        String str = "我来了";
        reader.write(str);

        reader.flush();
        reader.close();

    }
  • BufferedReader

API文档描述:

  1. BufferedReader类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行
  2. 可以通过构造函数指定缓冲区大小也可以使用默认大小。对于大多数用途,默认值足够大
  3. 由Reader构成的每个读取请求都会导致相应的读取请求由基础字符或字节流构成,建议通过BufferedReader包装Reader的实例类以提高效率如
//读取文件数据
public void readFile() throws Exception{
    BufferedReader bufferedReader = new BufferedReader(new FileReader("D://a.txt"));
    String str;
    while ((str = bufferedReader.readLine()) != null) {
        System.out.println(str);
    }
    //只需要关闭外部包装类即可。因为BufferedReader的close()回去调用FileReader的close()方法
    bufferedReader.close();		
}
  • BufferedWriter
  1. 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
    public void writeFile() throws Exception{
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D://a.txt"));
        String str = "跟我走";
        bufferedWriter.write(str);

        bufferedWriter.flush();
        bufferedWriter.close();
    }
  • 打印流printWriter
  1. 具有自动行刷新的缓冲字符输出流,特点是可以按行写出字符串,并且可以自动行刷新。
  2. java.io.BufferedWriter是缓冲字符输出流,内部有缓冲区可以进行块写操作提供效率,而PrintWriter就是通过连接它实现的缓冲功能(PW的很多构造方法内部自动连接它)。
    public void printFile() throws Exception{
        PrintWriter printWriter = new PrintWriter("D://a.txt");
        String str = "跟我走";
        int i = 123;
        double d = 1.23;
        printWriter.println(str);
        printWriter.println(i);
        printWriter.println(d);

        printWriter.flush();
        printWriter.close();
    }
posted @ 2022-01-17 23:30  西敲  阅读(48)  评论(0)    收藏  举报