Java学习笔记(45)—— IO——Reader / Writer

这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


一、Reader / Writer

1.1 概述

  • 字符流的抽象父类

1.2 方法

  • write(int c)

int四个字节中,末尾两个字节是 char 类型字符数据,只处理末尾两个字节的输出

  • write(char[],from,length)

输出from开始的length个字符

  • write(String s)

输出字符串的全部字符

二、InputStreamReader/OutputStreamWriter

2.1 概述

  • 字符编码转换流
  • InputStreamReader

读取 其他编码 转成 Unicode

  • OutputStreamWriter

Unicode 转成 其他编码 输出

2.2 练习:字符编码转换流

package 字符编码转换流;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Test1_OutputStreamWriter {
	public static void main(String[] args) throws IOException {
	/*
	 *	"abc中文" --Unicode编码--> 0061 0062 0063 4e2d 6587
	 *			转成GBK编码-->f4文件
	 *			转成UTF-8-->f5文件 
	 */
	f("d:/课程项目的临时文件/f4","abc中文","GBK");	
	f("d:/课程项目的临时文件/f5","abc中文","UTF-8");	
	f("d:/课程项目的临时文件/f6","abc中文","Unicode");	
	}

	private static void f(String path, String str, String encoding) throws IOException {
		// 读写文件的只能是文件流,即FIS或FOS流
		// 其他流可以套接文件流;OutputStreamWriter(,第二参数指定编码类型)
		OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path), encoding);
		// 利用文件流输出至文件
		out.write(str);
		// 关闭文件输入流,才可完成“写入文件”的操作
		out.close();
	}
}
package 字符编码转换流;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class Test2_OutputStreamWriter {
	public static void main(String[] args) throws IOException {
	/*
	 *	Unicode编码中所有的中文字符
	 *	/u4e00 -- /u9fa5,共20902个中文字符
	 *	将以上中文字符,转成GBK输出到f6,
	 *	将以上中文字符,转成UTF-8输出到f7,
	 * 
	 */
	f("d:/课程项目的临时文件/f6","GBK");
	f("d:/课程项目的临时文件/f7","UTF-8");
		
	}

	private static void f(String path, String encoding) throws IOException{
		
		OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),encoding);
		
		int count = 0;// 计数,用于换行
		// 依次遍历每一个字符并输出至文件
		for(char c = '\u4e00';c<='\u9fa5';c++) {
			// 编码的转换流,把Unicode转成其他编码再输出
			out.write(c);
			count++;
			// 每输出30个字符,换行
			if(count == 30) {
				out.write("\n");
				count = 0;
			}
		}
		// 释放系统资源
		out.close();
	}
}

三、BufferedReader

3.1 概述

  • BufferedReader 可以一行一行的读取文本数据
  • readLine()

读取一行数据

读取结束,再读取,得到 null

3.2 练习:BufferedReader按行读取数据

package 字符编码转换流;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Test3_BufferedReader按行读取readLine方法 {
	public static void main(String[] args) throws IOException {
		System.out.println("输入一个文件");
		String s = new Scanner(System.in).nextLine();
		// 创建File对象
		File f = new File(s);
		// 判断是否为文件,在此测试字符读写,所以指定文本文件
		if (!f.isFile()) {
			System.out.println("请输入正确的文件名或路径");
			return;
		}

		System.out.println("文件编码方式");
		String encoding = new Scanner(System.in).nextLine();
		
		/*	*希望一行一行的读取*
		 *	文件f--FIS(文件字符读取流)--ISR(编码转换流)--BR(按行读取)
		 *	三个流方式,嵌套一起使用,协同完成操作:
		 *	FileInputStream,直接连接文件,读取
		 *	InputStreamReader,字符编码的转化
		 *	BufferedReader,按行读取文本
		 */
		BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f), encoding));
		String line;
		// 惯用方式遍历
		while((line = in.readLine())!=null) {
			System.out.println(line);
		}
		in.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值