今天主要是字符流:
Reader
|--InputStreamReader
|--FileReader:专门用于处理文件的字符读取流对象。
Writer
|--OutputStreamWriter
|--FileWriter:专门用于处理文件的字符写入流对象。
简单的运用:就是把用字节流做的记事本(保存的功能)改编为用字符流实现。主要代码如下:
字节流:
public void actionPerformed(ActionEvent e) {//添加监听器
if (e.getSource() == baocun) {
save();//调用
}
}
public void save() {
try {
FileOutputStream fos = new FileOutputStream("res/like.txt");
//这里有一个小细节:当指定绝对路径是,定义目录分隔符有两种方式:
1、反斜线 但是一定要写两个。“res\\like.txt”2、斜线 写一个即可(如上)
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF(wenben.getText());
dos.close();
bos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
字符流:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == baocun) {// 获取通过 setSystemId 设置的系统标识符。
fd = new FileDialog(f, "Save", FileDialog.SAVE);// 储存
fd.setVisible(true);
file1 = new File(fd.getDirectory(), fd.getFile());
//获取此文件对话框的目录//根据指定的路径中的文件返回相应的 File 对象
save();
}
}
FileWriter fw = null;
public void save() {
try {
fw = new FileWriter(file1);//注意:构造函数:在写入流对象初始化时,必须要有一个存储数据的目的地。
fw.write(wenben.getText());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
fw.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
在这两段代码中不同的是储存的位置不一样,所以监听器中的代码有很大的差异,但同时都必要调用save()函数,在save()函数中由于字符流与字节流的代码迥然不同。
在字符流的代码中有一个小的细节需要我们注意,那就是try…catch…必须写成它的完全体。
另外关于BufferedWriter和BufferedReader字符流的缓冲区,
BufferedWriter的特有方法:newLine();跨平台的换行符。
BufferedReader的特有方法:readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,当读到末尾时,返回null。