javaSE24-- IO流--字符FileReader/FileWriter

字符FileReader/FileWriter

以字符为单位读写文件内容, 只能读写纯文本文件, 要求文本文件的编码格式要与当前环境的编码格式兼容

FileReader

建立流通道new FileReader
FileReader fr  = new FileReader("d:/abc.txt");
//abc.txt虽然是GBK编码, 当前环境是UTF8编码, abc.txt文件中都是英文字符, 英文字符不管是GBK还是UTF8编码都是一个字节
//如果文件是GBK格式, 文件中有中文, 读取时会出现乱码		
//一般使用FileReader读取与当前环境编码一致的文件
private static void m1() throws IOException {
    FileReader fr  = new FileReader("d:/Test08.java");
        //read()一次读取一个字符, 返回字符的码值,读到文件末尾返回-1
        int cc = fr.read();
        while( cc != -1 ){
        //把读到的字符打印到屏幕上
        System.out.print(  (char)cc );
        cc = fr.read();
    }

    fr.close();
}
读取文本文件内容,一次读取一个字符数组, 异常处理, 自动关闭
private static void m2() {
		try (
				FileReader fr = new FileReader("d:/test08.java");
				){
			char [] contents = new char[1024];
			int len = fr.read(contents);
			while( len != -1 ){
				//把读到的len个字符进行处理,  转换为字符串打印
				System.out.print( new  String(contents , 0 , len) );
				len = fr.read(contents);
			}			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

FileWriter

//文件不存在就创建, 文件已存在,以追加的方式打开
fw = new FileWriter(“d:/xyz.txt”, true);

public static void main(String[] args) {

        //字符流 每次直接读取一个字符,底层有一个转换流
        //字符流只能读纯文本文件
        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader("E:\\nihao.txt");
            writer = new FileWriter("E:\\b.txt", true);
//        System.out.println((char) reader.read());
//        System.out.println(reader.read());
//        System.out.println(reader.read());
//        System.out.println(reader.read());
            int c = reader.read();
            System.out.println((char) c);
            while (true) {
                if (c == -1) break;
                System.out.print((char) c);
                writer.write(c);
                c = reader.read();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            writer.close();//必须关闭对应的流才能显示
        } catch (IOException e) {
            e.printStackTrace();
        }

//
//        //字符流 每次直接读取一个字符,底层有一个转换流
//        //字符流只能读纯文本文件
//        FileReader reader = new FileReader("E:\\nihao.txt");
//        FileWriter writer = new FileWriter("E:\\b.txt");
        System.out.println((char) reader.read());
        System.out.println(reader.read());
        System.out.println(reader.read());
        System.out.println(reader.read());
//       int  c=reader.read();
//        System.out.println((char)c);
//        while (true){
//            if (c==-1) break;
//            System.out.print((char)c);
//            writer.write(c);
//            c=reader.read();
//
//        }
//        reader.close();
//        writer.close();//必须关闭对应的流才能显示
//
//

    }
}

文本文件的复制

一次复制一个字符, 异常处理, 自动关闭流

一次复制一个字符数组, 异常处理, 手动关闭流

InputStreamReader/OutputStreamWriter转换流读写

FileReader/FileWriter只能读写与当前环境编码兼容的文本文件

如果文本文件与当前环境编码不兼容, 使用InputStreamReader/OutputStreamWriter转换流读写

转换流采用了适配器设计模式

当操作的文件编码与当前环境编码不兼容, 使用OutputStreamWriter把字符以指定的编码转换为字节

OutputStream out = new FileOutputStream("d:/def.txt", true );
		OutputStreamWriter osw = new OutputStreamWriter(out, "GBK");

//在当前程序与指定的文件之间建立字节流通道
	InputStream in = new FileInputStream("d:/def.txt");
	//使用GBK编码,把in字节流中的数据转换为字符流
	InputStreamReader isr = new InputStreamReader(in, "GBK");
	//当操作的文件编码与当前环境编码不兼容, 使用OutputStreamWriter把字符以指定的编码转换为字节
	private static void m2() throws IOException {
		//把字符保存到d:/def.txt文件, 该文件是GBK编码, 当前环境是UTF8编码, 把字符转换为GBK格式再保存
		OutputStream out = new FileOutputStream("d:/def.txt", true );
		OutputStreamWriter osw = new OutputStreamWriter(out, "GBK");
		
		osw.write("\r\n");
		osw.write("当前的内容是使用转换流保存到文件中的, 工作区编码是UTF8, 该文件使用GBK编码 ");
		
		osw.close();
	}

当文本文件的编码与当前环境编码不兼容时, 使用InputStreamReader类读取

	private static void m1() throws IOException {
		//读取d:/def.txt文件, 该文件使用GBK编码,当前环境使用UTF8编码
		//在当前程序与指定的文件之间建立字节流通道
		InputStream in = new FileInputStream("d:/def.txt");
		//使用GBK编码,把in字节流中的数据转换为字符流
		InputStreamReader isr = new InputStreamReader(in, "GBK");
		
		int cc = isr.read();
		while( cc != -1){
			System.out.print((char)cc);
			cc = isr.read();
		}
		
		isr.close();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值