JAVA学习笔记(三十二)- 字符流 FileReader & FileWriter

标题

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;

/*
 * FileReader/FileWriter类
 * 文件字符输入输出流
 */
public class Test03 {
    public static void main(String[] args) throws IOException {
        test3();
    }

    // 文件字符输入流
    public static void test1() throws IOException {
        Reader reader = new FileReader("D:\\Java\\hello.txt");
        // 每次读取一个字符
        int data = reader.read();// 返回一个int类型的字符值
        while (data != -1) {
            System.out.println((char) data);
            data = reader.read();
        }
        reader.close();
    }

    // 文件字符输出流
    public static void test2() throws IOException {
        Writer writer = new FileWriter("D:\\Java\\hello.txt", true);
        writer.write("余书磊");
        writer.flush();
        System.out.println("使用字符输出流写入成功!");
        writer.close();
    }

    // 文件复制
    public static void test3() throws IOException {
        Reader reader = new FileReader("D:\\Java\\hello.txt");
        Writer writer = new FileWriter("D:\\Java\\hello_bak.txt");

        //方式一:每次复制一个字符
        int data = reader.read();
        while (data != -1) {
            writer.write(data);
            data = reader.read();
        }

        //方式二:每次复制一个字符数组
        char[] buffer=new char[10];
        int num=reader.read(buffer);//返回实际读取的长度
        while(num!=-1){
            writer.write(buffer, 0, num);
            num=reader.read(buffer);
        }

        //方式三:将读取的字符拼接到字符串中,再写入
        StringBuffer sb=new StringBuffer();
        int data = reader.read();
        while (data != -1) {
            sb.append((char)data);
            data = reader.read();
        }
        writer.write(sb.toString());

        writer.flush();
        System.out.println("文件复制成功!");
        writer.close();
        reader.close();
    }

    /*
     *  字符流无法复制二进制文件,字节流可以
     */
    public static void test4() throws IOException {
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\Java\\ascii.jpg"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\Java\\ascii_bak.jpg"));
        int data = bis.read();
        while (data != -1) {
            bos.write(data);
            data = bis.read();
        }

        bos.flush();
        System.out.println("文件复制成功!");
        bos.close();
        bis.close();
    }

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。