一、字符流
字符流是什么
- 字符流是可以直接读取字符的IO流
- 字符流读取字符,就要先读去到字节数据,然后转为字符,如果要写出字符,需要把字符转为字节再写出
文件字符流
字符流的两个抽象父类:字符输出流:Writer 和字符输入流:Reader
1、字符输出流:Writer
java.io.Writer抽象类时标识用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
- void write(int c):写入单个字符
- void write(char[] cbuf):写入字符数组
- abstract void write(char[] cbuf,int off,int len):写入字符数组的某一部分,off数组的开始索引,len写的字符个数
- void write(String str):写入字符串
- void write(String str,int off,int len):写入字符串的某一部分,off字符串的开始索引,len写的字符个数
- void flush():刷新该流的缓冲
- void close():关闭此流,但要先刷新它。
FileWriter类
java.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
作用:把内存中的字符数据写入到文件中
构造方法摘要 |
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 |
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 |
FileWriter(FileDescriptor fd) 构造与某个文件描述符相关联的 FileWriter 对象。 |
|
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 |
参数:写入数据的目的地
String name 文件路径;File file 文件
构造方法作用:
1.创建一个FileWriter对象;
2.会根据构造方法中传递的文件/文件路径,创建文件;
3.会把FileWriter对象指向创建好的文件。
package test4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class WriterTest07 {
public static void main(String[] args) throws IOException {
File f2=new File("d:/c.txt");
if (!f2.exists()){
f2.createNewFile();
}
//定义一个字符输出流,向f2文件写入内容
Writer out=new FileWriter(f2);
out.write(97);
out.write((int)'中');
char[] ch={'天','上','空','气','好','呢'};
out.write(ch,0,2);
out.write("飞天肉饼");
out.write("abcdef",0,3);
out.flush();//字符输出流有缓冲区的概念,需要刷新缓冲区才更新到硬盘
out.close();
}
}
-
close() 和 flush() 的区别
- close() 关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
- flush() 仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。
2、字符输入流:Reader
java.io.Reader抽象类是标识用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
磁盘-->内存
public void close():关闭此流并释放与此流相关联的任何系统资源。
public int read():从输入流读取一个字符。
public int read(char[] cbuf):从输入流中读取一些字符。
FileReader类
java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
作用:把硬盘文件中的数据以字符的方式读取到内存中。
构造方法摘要 |
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 |
FileReader(FileDescriptor fd) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 |
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 |
参数:String name文件路径;File file文件
构造方法的作用:
1.创建一个FileReader对象
2.会把FileReader对象指向要读取的文件
package test4;
import java.io.*;
import java.util.Arrays;
public class ReaderTest06 {
public static void main(String[] args) throws IOException {
//定义file对象
File f1=new File("d:/a.txt");
//定义字符输入流,用来读取f1这个文件
Reader in=new FileReader(f1);
//读取一个字符(中文占一个字符)
int n=in.read();//所有的中文字符按照一个字符处理,每次读取一个字符,把读字符转换成对应的编码值
System.out.println((char)n);
int n1=in.read();
System.out.println((char)n1);
//使用缓冲区读取多个字符
char[] buffer=new char[10];
int n=in.read(buffer);//每次最多读取buffer数组长个字符,把读取到的字符存入buffer数组中,返回的是实际读取到的字符数
System.out.println(n);
System.out.println(Arrays.toString(buffer));
char[] buffer1=new char[10];
int n1=in.read(buffer1);//每次最多读取buffer1数组长个字符,把读取到的字符存入buffer数组中,返回的是实际读取到的字符数
System.out.println(n1);
System.out.println(Arrays.toString(buffer1));
}
}