字符流
- 字节流适合做一切文件数据的拷贝(音视频,文本)
- 字节流不适合读取中文内容输出
- 字符流适合做文本的操作(读和写)
- Reader(抽象类)
输入流
- FileReader
- 构造方法:FileReader(String name)
- 常用方法:public int read()(继承自InputStreamReader的方法)
- public int read(byte[] b)(继承自Reader的方法)
public void fileReaderTest() throws IOException {
Reader r = new FileReader("E:\\java_study\\demo3\\images\\test\\zxl\\出师表.txt");
// int code = r.read();
// System.out.println((char) code);
// int code;
// while ((code=r.read()) != -1){
// System.out.print((char)code);
// }
char[] buffer = new char[1024];
int len;
while ((len=r.read(buffer)) != -1){
String s = new String(buffer,0,len);
System.out.print(s);
}
}
- BufferedReader
- 构造器 BufferedReader(Reader in)
- 常用方法:String readLine()(读取完毕返回null)
public void bufferedReaderTest() throws IOException {
Reader r0 = new FileReader("E:\\java_study\\demo3\\images\\test\\zxl\\出师表.txt");
BufferedReader r = new BufferedReader(r0);
// int code = r.read();
// System.out.println((char) code);
// int code;
// while ((code=r.read()) != -1){
// System.out.print((char)code);
// }
//按照字符数组读
// char[] buffer = new char[1024];
// int len;
// while ((len=r.read(buffer)) != -1){
// String s = new String(buffer,0,len);
// System.out.print(s);
// }
//按照行读
String line;
while ((line=r.readLine()) != null){
System.out.println(line);
}
}
- InputStreamReader
- 构造方法:InputStreamReader(InputStream in)
- 常用方法:int read(char[] cbuf, int off, int len)
- Writer(抽象类)
- FileWriter
- 常用构造器:FileWriter(String name)
- void write(String str, int off, int len)(继承自OutputStreamWriter的方法)
- void write(char[] cbuf, int off, int len)(继承自OutputStreamWriter的方法)
- void write(int c)(继承自OutputStreamWriter的方法)
public void fileWriterTest() throws Exception{
Writer w = new FileWriter("E:\\java_study\\demo3\\images\\test\\zxl\\滕王阁序.txt",true);
w.write('滕');
w.write("王阁序");
w.write("\r\n");
char[] chars = {'豫','章','故','郡'};
w.write(chars);
w.write(chars,0,2);//第0个开始,两个
w.write("洪都信服");
w.write("洪都信服",0,3);
w.flush();
w.close();
}
- BufferedWriter
- 构造器:BufferedWriter(Wirter w)
- 写方法:public void write(String s)
- 写方法:void write(char[] cbuf, int off, int len)
- 常用方法:void newLine()(换行)
public void bufferedWriterTest() throws Exception{
Writer w0 = new FileWriter("E:\\java_study\\demo3\\images\\test\\zxl\\滕王阁序.txt",true);
BufferedWriter w = new BufferedWriter(w0);
w.write('滕');
w.write("王阁序");
w.write("\r\n");//换行
w.newLine();//换行
char[] chars = {'豫','章','故','郡'};
w.write(chars);
w.write(chars,0,2);//第0个开始,两个
w.write("洪都信服");
w.write("洪都信服",0,3);
w.flush();
w.close();
}
-
OutputStreamWriter
- 构造方法:OutputStreamWriter(OutputStream out)
- void write(char[] cbuf, int off, int len)
- void write(int c)
- void write(String str, int off, int len)
-
PrintWriter
- 构造方法:PrintWriter(String fileName)
- 常用方法:void print()可打印几乎所有类型数据
使用BufferWriter和BufferReader将文件1的文字排序后存储到文件2中
public static void changeCSB(){
try(
BufferedReader r = new BufferedReader(new FileReader("E:\\java_study\\demo3\\images\\test\\zxl\\出师表.txt"));
BufferedWriter w = new BufferedWriter(new FileWriter("E:\\java_study\\demo3\\images\\test\\zxl\\出师表1.txt"));
){
List<String> list = new ArrayList<>();
String line;
while ((line = r.readLine()) != null){
list.add(line);
}
System.out.println(list);
//自定义排序规则
List<String> sizes = new ArrayList<>();
Collections.addAll(sizes,"一","二","三","四","五","六","七","八","九","十","十一","十二");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return sizes.indexOf(o1.substring(0,o1.indexOf(".")))
-sizes.indexOf(o2.substring(0,o2.indexOf(".")));
}
});
System.out.println(list);
for (String s : list) {
w.write(s);
w.newLine();
}
} catch (Exception e) {
e.printStackTrace();
}
}
一般情况下,使用PrintStream输出流,使用BufferedReader输入流