JavaSE基础——IO流详解(1)字节流和字符流

一、IO流的概述

   Java中对数据的操作是通过流的方式;
   IO流用于处理设备之间的数据传输。

二、IO流的分类

在这里插入图片描述

三、使用常用的输入输出流对文件进行复制

   1、字节流

   (1)FileOutputStream 和 FileInputStream

     FileOutStream :字节写入流,用字节流写入数据;
     FileInputStream :字节读取流,用字节流读取数据。
复制文件代码:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        //创建可追加数据的输出流,原有的文件数据不会被覆盖
        FileOutputStream fos = new FileOutputStream("test.txt",true);
        FileInputStream fis = new FileInputStream("b.txt");
        //创建字节缓冲一次读取1kb的数据
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = fis.read(bytes)) != -1){
            fos.write(bytes,0,len);
        }
        fos.close();
        fis.close();
    }
}

   (2)BufferedOutputStream 和 BufferedInputStream

    BufferedOutputStream :高效的字节写入流,它的底层创建了一个临时的字节缓冲区,提高了效率,减少了对文件的操作次数,创建高效的字节写入流时它的构造方法接收一个OutputStream类型的参数 。
    BuffedInputStream :高效的字节读取流,它的底层创建了一个临时的字节缓冲区,提高了效率,减少了对文件的操作次数,创建高效的字节读取流时它的构造方法接收一个InputStream类型的参数 。

代码复制文件:

import java.io.*;

public class Test1 {
    public static void main(String[] args) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c.txt"));
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));

        int len = 0;
        while ((len = bis.read()) != -1){
            bos.write(len);
        }
        bis.close();
        bos.close();
    }
}

   2、字符流

   (1)OutputStreamWriter和InputStreamReader

     OutputStreamWriter:是个转换流,字节流转换为字符流进行写入,构造方法参数是一个OutputStream类型的;
     InputStreamReader:转换流,字节流转换为字符流进行读取,构造方法参数是一个InputStream类型的。

代码演示:

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {
        OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("wang.txt"));
        InputStreamReader reader = new InputStreamReader(new FileInputStream("test.txt"));
        int len = 0;
        while ((len = reader.read()) != -1){
            writer.write(len);
            writer.flush();
        }
        writer.close();
        reader.close();
    }
}

要注意的是字符流写完要刷新一下,不然写入的数据是没有的。

   (3)BufferedReader和BufferedWriter

     BufferedReader:高效的字符读取流,它的底层有个字符的缓冲区,可以提高读取的效率,减少了对文件的操作次数,它的构造方法接收一个Reader类型的参数;
     BufferedWriter:高效的字符写入流,它的底层有字符缓冲区,可以提高写入的效率,减少对文件的操作次数,它的构造方法接收一个Writer类型的参数。

代码演示:

import java.io.*;

public class Test1 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("kaer.txt")));
        String line = null;
        while ((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
}

   (2)便捷类 FileReader和FileWriter

     FileReader :在给定的文件中读取数据,构造方法传入一个File或者文件路径字符串类型;
     FileWriter:根据给定的文件名参数或文件类型参数写入数据。

代码演示:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test2 {
    public static void main(String[] args){
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
            fileReader = new FileReader("b.txt");
            fileWriter = new FileWriter("Diana.txt");
            int len = 0;
            while ((len = fileReader.read()) != -1){
                fileWriter.write(len);
                fileWriter.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            } try {
                fileWriter.close();
            } catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}
发布了58 篇原创文章 · 获赞 7 · 访问量 2293

猜你喜欢

转载自blog.csdn.net/weixin_42492089/article/details/103103866