javaSE (三十一)IO字符流、用字符流.nextLine()反转文本、转换流内存示意图

1、字节流和字符流的区别
其实字符流和字节流没多大区别,字符流也可以拷贝文件,但不推荐使用,因为读取的时候字节转字符,然后字符还是要转字节 (用码表来进行字节和字符之间的转换

2、什么时候用到字符流?
“只读或者只写的时候”

程序需要读取一段文本,或者需要写出一段文本的时候可以用字符流
读取的时候按照字符大小读取的,不会出现半个中文这阵种情况

写出的时候可以直接将字符串写出,不用转换成字符数组

3、字符流只能拷贝纯文本的文件

原因:字节转换成字符,按照码表,如果不是纯文本,就找不到对应的字符(比如图片、mp3),就不能转换了

4、用nextLine反转文本

问题:将文本第一行变成最后一行,以此类推
思路:

  1. 用buffedReader的nextLine()方法读取每一行,放到ArrayList里面
    一开始想用字符串数组存储每一行的字符串,结果发现数组需要给定初始化长度(就算动态也需要遍历),所以直接用集合!!!!

  2. 反向遍历集合,输入到buffedRrite里面(这里用普通的遍历,因为增强for不能反序)

  3. 流对象尽量晚开早关(但是调整的话好烦啊)

代码:

package cn.njupt;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

//注意:流对象尽量晚开早关(但是调整的话好烦啊)

public class file {
	public static void main(String[] args) throws IOException {

		BufferedReader bre = new BufferedReader(new FileReader("xxx.txt"));
		BufferedWriter bwr = new BufferedWriter(new FileWriter("bbb.txt"));
		ArrayList<String> list = new ArrayList<>();

		String line;
		while ((line = bre.readLine()) != null) {
			list.add(line);
		}
		// 增强for循环不能反序,所以这里直接用普通的for循环
		for (int i = list.size() - 1; i >= 0; i--) {
			bwr.write(list.get(i));
			bwr.newLine();
		}
		bre.close();
		bwr.close();

	}

}

5、转换流:(为了优化流的传输)

public class file {
	public static void main(String[] args) throws IOException {
		BufferedReader bre = 
				new BufferedReader(new InputStreamReader(new FileInputStream("utf-8.txt"),"utf-8"));
		BufferedWriter bwr = 
				new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"),"gbk.txt"));
		
	}

转换流的内存示意图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39782583/article/details/84931738
今日推荐