IO流之 字符流 BufferedReader,Buffered
2019-08-17 本文已影响0人
测试员
BufferedReader
*read():
将字节转化成字符,一次性将若干字符读到缓存区,逐个返回给程序,降低读 文件的次数,提高效率。
*readLine():
读取一行字符,不包括换行符。遇到结束标记返回 null;
BufferedWriter
*write():将字符转化成字节,方法写出字符时先写到缓冲区,缓冲区满时一次性写到文件上并清空缓冲区,降低写文件的次数,提高效率。
*newLine():
输出一个可跨平台的回车换行符号。
可以生成带行号的输入流
*LineNumberReader,LineNumberInputStream。
getLineNumber():获取行号;
setLineNumber():设置起始行号;
使用指定码表读写字符
例:(低效率)
字节流转换字符流 fisr = new 字节流转换字符流(new 字节流("目标路径"),"指定编码");
Eg:
InputStreamReader fisr = new InputStreamReader(new FileInputStream("aaa.txt"),"uutf-8");
例:(高效率)再套个缓冲区
缓冲区字符流 br = 缓冲区字符流(new 字节流转换字符流(new 字节流("目标路径"),"指定编码"));
Eg:
BufferedReader br= BufferedReader(new InputStreamReader(new FileInputStream("aaa.txt"),"uutf-8"));
package com.io.learn;
import java.io.*;
import java.util.ArrayList;
文件与集合转换练习
public class 字符流练习 {
public static void main(String[] args) throws ClassNotFoundException, IOException {
final File target = new File("NewFile1.txt");
final ArrayList<String> array = new ArrayList<>();
array.add("我是一个粉刷匠");
array.add("粉刷本领特别强");
array.add("我要把那新房子");
array.add("刷的非常的漂亮");
listToFile(target,array);
ArrayList<String> new_list = new ArrayList<>();
fileToList(target,new_list);
for (String elmt : new_list) {
System.out.println("elmt = " + elmt);
}
}
集合转文件
/**
* 集合转文件
* @param target
* @param list
*/
public static void listToFile(File target, ArrayList<String> list) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(target))) {
if (list != null && list.size() > 0) {
for (String str : list) {
writer.write(str);
writer.newLine();
writer.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
文件转集合
/**
* 文件转集合
* @param target
* @param list
*/
public static void fileToList(File target, ArrayList<String> list) {
try (BufferedReader reader = new BufferedReader(new FileReader(target))) {
String len;
while((len = reader.readLine())!= null){
list.add(len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}