2.3字符输出流:Writer
Writer类常用方法:
void write(char[] cbuf) 输出字符数组数据
abstract void write(char[] cbuf, int off, int len) 输出字符数组的一部分
void write(String str) 输出字符串数据
与OutputStream类的定义类似,但是比起OutputStream还多实现了一个Appendable接口。(都是追加操作)
因为Writer本身也是一个抽象类,所以需要一个子类来进行文件操作——FileWriter
使用Writer类实现内容输出:
import java.io.*;
public class TestWriter {
public static void main(String[] args) throws Exception{
File file = new File("D:" + File.separator + "demo"+
File.separator + "test2.txt"); //第一步:定义要输入文件的路径
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs(); //如果目录不存在,则创建文件目录
}
Writer out = new FileWriter(file); //第二步
String str = "今天星期二,今晚不睡觉"; //定义输出内容
out.write(str); //第三步:输出字符串数据
out.close(); //第四步:关闭输出流
}
}
2.4字符输入流:Reader
Reader类常用方法:
int read() 读取单个字符
int read(char[] cbuf) 读取数据到字符数组中,返回读取长度
abstract int read(char[] cbuf, int off, int len) 将数据读取到部分字符数组中,同时返回读取长度
Writer类中存在直接输出字符串的操作, 但Reader类中并没有直接返回字符串的操作。
这是因为输出数据时可以采用追加的模式,所以随着时间的推移,文件可能变得非常庞大,如果Reader类中提供了直接读取全部数据的方式,则有可能造成数据溢出。
(Writer输出的是程序允许的数据量,所以可以直接输出,而Reader因为追加的关系,不确定)
因为Reader本身也是一个抽象类,所以需要一个子类来进行文件操作——FileReader
使用Reader读取数据:
import java.io.*;
public class TestReader {
public static void main(String[] args) throws Exception{
File file = new File("D:"+ File.separator +"demo" +
File.separator +"test2.txt"); //第一步
if(file.exists()){
Reader input = new FileReader(file); //第二步
char data [] = new char [123];
int len =input.read(data); //第三步
input.close(); //第四步
System.out.println(new String(data,0,len));
}
}
}