1.FileWriter与BufferedWriter的区别
- FileWriter fw = new FileWriter(file);
- BufferedWriter bw = new BufferedWriter (fw);
- fw.write(“你好”);
- fw.close();
- fw.close();
这里有一个 “修饰类 “的概念
FileWriter 是被修饰者
BufferedWriter 是修饰者
一般用法为
BufferedWriter bw = new BufferedWriter(new FileWriter( “filename “));
上面这个加了一个缓冲,缓冲写满后在将数据写入硬盘
这样做极大的提高了性能
如果单独使用 FileWriter 也可以,你每写一个数据,硬盘就有一个写动作,性能极差
相同点:都是使用字符流写文件。
不同点:前者采用缓冲区,可以预读一些准备写入的数据,增加写入文件时的效率,
而后者则没有这个功能。具体的在BufferedWriter的API DOC中有说明。
2.写入txt文件出现乱码
windows自身采用的编码格式是gbk(而gbk和gb2312基本上是一样的编码方式),而IDE中Encode不修改的话,默认是utf-8的编码,这就是为什么会出现乱码的原因。当在OS下手工创建并写入的txt文件(gbk),用程序直接去读(utf-8),就会乱码。为了避免可能的中文乱码问题,最好在文件写入和读出的时候显式指定编码格式。
private static void readTxt() {
try {
File f1 = new File(“e:/qqgroup.txt”);// 打开文件
FileInputStream in = new FileInputStream(f1);
// 指定读取文件时以UTF-8的格式读取
BufferedReader br = new BufferedReader(new InputStreamReader(in,
“UTF-8”)); // 读取文件
String name = “”;
String numb = “”;
String str;
System.out.println(“群名*群号”);
while ((str = br.readLine()) != null) {
if (str.indexOf(“class=\”addrtitle\”>”)>-1) {
name = str.substring(str.indexOf(“>”), str.indexOf(“</“));
System.out.println(“群名:” + name);
}
if (str.indexOf(“gid=”)>-1) {
numb = str.substring(str.indexOf(“gid=”), str.indexOf(“@groupmail”));
System.out.println(“群号:” + numb);
}
}
in.close();// 关闭读取
} catch (Exception e1) {// 如果有错误,这里进行处理
e1.printStackTrace();// 打印错误信息
}
}
(1)写入乱码
File f = new File(filePathAndName);
OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(f),”UTF-8”); BufferedWriter writer=new BufferedWriter(w);
writer.write(“file content”);
writer.flush();
writer.close();
(2)读取txt文件
File f = new File(“PathAndName”);
if(f.isFile()&&f.exists()){
InputStreamReader read = new InputStreamReader(new FileInputStream(f),”UTF-8”); BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
“file content” += line;
}
read.close();
}
File file = ``new
File(``"d:/1.txt"``);
BufferedWriter bw = ``new
BufferedWriter(``new
FileWriter(file));
``bw.write(``"abc"``);
``bw.newLine();
``bw.write(``"efg"``);
``bw.flush();
``bw.close();
3.字符流的写入写出
``File file=``new
File(``"F:\\io\\abc.txt"``);
``FileOutputStream fos=``new
FileOutputStream(file);
``OutputStreamWriter osw=``new
OutputStreamWriter(fos);
``osw.write(``'大'``);
``osw.close();
``FileInputStream fis=``new
FileInputStream(file);
``InputStreamReader isr=``new
InputStreamReader(fis);
``System.out.println((``char``)isr.read());
``isr.close();