文章目录

  • 字节流与字符流操作文件的读写的方式
  • 字节流操作文件的读取和写入:
  • 字符流操作文件的读取和写入:
  • 缓冲流操作文件的读取和写入
  • BufferedOutputStream与BufferedInputStream组合写入与读取
  • BufferedWriter与BufferedReader组合写入与读取



字节流与字符流操作文件的读写的方式

  • 字节流文件操作: 主要用于读取图片,MP3,AVI视频等文件。
  • 字符流文件操作: 主要用于读取处理纯文本数据。
  • 缓冲流操作文件的读取和写入
  • 使用nio读写文件

字节流操作文件的读取和写入:

字节流文件操作: 主要用于读取图片,MP3,AVI视频等文件。
使用InputStream与OutputStream的子类实现为:FileInputStream与FileOutputStream。

字节流向文件中写入数据(字节流FileOutputStream )

public static void testFileOutputStream() {
    try (FileOutputStream fileOutputStream = new FileOutputStream("E:\\document\\io\\d.txt");
    ){

        String str = "FileOutputStream测试数据";
        fileOutputStream.write(str.getBytes());

        String str2 = "\r\n";
        fileOutputStream.write(str2.getBytes());

        String str3 = "FileOutputStream测试再次添加数据";
        fileOutputStream.write(str3.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

字节流从文件的读取(字节流FileInputStream)

//  read()
public static void testFileInputStream() {

    try (FileInputStream fileOutputStream = new FileInputStream("E:\\document\\io\\d.txt");// 内容:FileOutputStream测试数据\r\nFileOutputStream测试再次添加数据
    ){
        // read()
       int read1 =  fileOutputStream.read();
        System.out.println((char) read1);
       int read2 =  fileOutputStream.read();
        System.out.println((char) read2);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
// read(byte b[])  new String(arr)
public static void testFileInputStreamReadArr() {

    try (FileInputStream fileOutputStream = new FileInputStream("E:\\document\\io\\d.txt");// 内容:FileOutputStream测试数据\r\nFileOutputStream测试再次添加数据
    ){
        // read(byte b[])
        byte[] arr = new byte[2048];
        while ((fileOutputStream.read(arr)) != -1) {
            System.out.println(new String(arr));
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
// read(byte b[])  new String(arr,0,len)
public static void testFileInputStreamReadArrLength() {
    try (FileInputStream fileOutputStream = new FileInputStream("E:\\document\\io\\d.txt");// 内容:FileOutputStream测试数据\r\nFileOutputStream测试再次添加数据
    ){
        // read(byte b[])
        byte[] arr = new byte[2048];
        int len ;
        while (( len = fileOutputStream.read(arr)) != -1) {
            System.out.println(new String(arr,0,len));
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

打印结果:

文件读入流 java java 文件流读取_字符流


结论:使用// read(byte b[]) new String(arr,0,len)

字符流操作文件的读取和写入:

字符流文件操作: 主要用于读取处理纯文本数据。
使用Reader与Writer的子类实现为:FileReader与FileWriter

字符流向文件中写入数据(字符流FileWriter )

public static void testFileWriter() {
    try (FileWriter fileWriter = new FileWriter("E:\\document\\io\\e.txt");
    ){

        String str = "FileWriter测试数据";
        fileWriter.write(str);

        String str2 = "\r\n";
        fileWriter.write(str2);

        String str3 = "FileWriter测试再次添加数据";
        fileWriter.write(str3);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

字符流从文件的读取(字符流FileReader)

// read()
public static void testFileReader() {

    try (FileReader fileReader = new FileReader("E:\\document\\io\\e.txt");// 内容:FileWriter测试数据\r\nFileWriter测试再次添加数据
    ){
        // read()
       int read1 =  fileReader.read();
        System.out.println((char) read1);//F
       int read2 =  fileReader.read();
        System.out.println((char) read2);//i
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// read(char cbuf[])  new String(arr)
public static void testFileReaderArr() {
    try (FileReader fileReader = new FileReader("E:\\document\\io\\e.txt");// 内容:FileWriter测试数据\r\nFileWriter测试再次添加数据
    ){
        // read(byte b[])
        char[] arr = new char[2048];
        while ((fileReader.read(arr)) != -1) {
            System.out.println(new String(arr));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// read(char cbuf[])  new String(arr,0,len)
public static void testFileReaderArrLength() {
    try (FileReader fileReader = new FileReader("E:\\document\\io\\e.txt");// 内容:FileWriter测试数据\r\nFileWriter测试再次添加数据
    ){
        // read(byte b[])
        char[] arr = new char[2048];
        int len ;
        while (( len = fileReader.read(arr)) != -1) {
            System.out.println(new String(arr,0,len));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

打印结果:

文件读入流 java java 文件流读取_操作文件_02


结论:使用// read(char cbuf[]) new String(arr,0,len)

缓冲流操作文件的读取和写入

BufferedOutputStream与BufferedInputStream组合写入与读取

步骤:

  1. FileOutputStream对象;
  2. new BufferedOutputStream(FileOutputStream对象)

BufferedOutputStream向文件中写数据

public static void testBufferedOutputStream() {
    try (FileOutputStream fw = new FileOutputStream("E:\\document\\io\\h.txt");
         BufferedOutputStream bis = new BufferedOutputStream(fw);
    ){
        bis.write("testByBufferedOutputStream测试文本".getBytes());
        bis.write("\r\n".getBytes());
        bis.write("testByBufferedOutputStream测试文本再添加".getBytes());
        bis.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

BufferedInputStream从文件中读取数据。

步骤:

  1. FileInputStream 对象;
  2. new BufferedInputStream(FileInputStream 对象)
public static void testBufferedInputStream() {
    try (FileInputStream fis = new FileInputStream("E:\\document\\io\\h.txt");
         BufferedInputStream bis = new BufferedInputStream(fis)
    ) {
        int len ;
        byte[] arr = new byte[1024];
        while ((len = bis.read(arr)) != -1) {
            System.out.println(new String(arr, 0, len));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
BufferedWriter与BufferedReader组合写入与读取

BufferedWriter向文件中写数据

步骤:

  1. FileWriter 对象;
  2. new BufferedWriter(FileWriter 对象)
public static void testByBufferedWriter() {
    try (FileWriter fw = new FileWriter("E:\\document\\io\\f.txt", true);
         BufferedWriter bw = new BufferedWriter(fw);
    ){
        bw.write("testByBufferedReader测试文本");
        bw.write("\r\n");
        bw.write("testByBufferedReader测试文本再添加");
        bw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

BufferedReader从文件中读取数据。

步骤:

  1. FileReader 对象;
  2. new BufferedReader(FileReader 对象)
public static void testByBufferedReader() {
    try (FileReader fileReader = new FileReader("E:\\document\\io\\f.txt");
         BufferedReader bufferedReader = new BufferedReader(fileReader)
    ) {
        String read;
        while ((read = bufferedReader.readLine()) != null) {
            System.out.println(read);
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

注:小文件推荐使用缓存输入输出流操作文件内容。大文件推荐使用NIO操作文件内容