在程序中一个字符等于两个字节,Java为我们提供了Reader和Writer两个专门操作字符流的类
1) 字符输出流:Writer
Writer是一个字符流,它是一个抽象类,所以要使用它,也必须通过其子类来实例化它后才能使用它。
Writer类的常用方法
方法名称 | 描述 |
public abstract void close() throws IOException | 关闭输出流 |
public void write(String str) throws IOException | 将字符串输出 |
public void write(char cbuf) throws IOException | 将字符数组输出 |
public abstract void flush() throws IOException | 强制性清空缓存 |
示例1:HelloWorld
向一个文本文件中通过字符输出流写入数据
public static void main(String[] args) throws Exception {
// 声明一个File对象
File file = new File("hellowolrd.txt");
// 声明一个Write对象
Writer writer = null;
// 通过FileWriter类来实例化Writer类的对象并以追加的形式写入
writer = new FileWriter(file, true);
// 声明一个要写入的字符串
String str = "字符串形式写入Helloworld";
// 写入文本文件中
writer.write(str);
// 刷新
writer.flush();
// 关闭字符输出流
writer.close();
}
2) 字符输入流:Reader
Reader本身也是一个抽象类,同样,如果使用它,我们需要通过其子类来实例化它才可以使用它。
Reader类的常用方法
方法名称 | 描述 |
public abstract void close() throws IOException |
|
public int read() throws IOException |
|
public int read(char cbuf) throws IOException |
|
通过方法我们看到Reader类只提供了一个读入字符的方法
示例2:还是Helloworld
在上面的基础上把文本中的内容读出来,并且显示在控制台上
public static void main(String[] args) throws Exception {
// 声明一个File对象
File file = new File("hellowolrd.txt");
// 声明一个Reader类的对象
Reader reader = null;
// 通过FileReader子类来实例化Reader对象
reader = new FileReader(file);
// 声明一个字符数组
char[] c = new char[1024];
// // 将内容输出
// int len = reader.read(c);
//循环方式一个一个读
int len=0;
int temp=0;
while((temp=reader.read())!=-1){
c[len]=(char)temp;
len++;
}
// 关闭输入流
reader.close();
// 把char数组转换成字符串输出
System.out.println(new String(c, 0, len));
}
2. 字符流与字节流的区别
操作字节流操作时本身不会用到缓冲区,是文件本身直接操作,而字节流在操作时就使用到了缓冲区。
如果我们在操作字符流的时候,不关闭流,我们写入的数据是无法保存的。所以在操作字符流的时候一定要记得关闭流