3)、如何提高IO操作
缓冲字符流BufferedReader、BufferedWriter和缓冲字节流一样,引进缓冲字符流的目的也是为了提高I/O操作的效率。BufferedReader和BufferedWriter类常用的构造方法如下:
BufferedReader(Obj) ,BufferedWriter(Obj)
它们的方法与Reader类和Writer类中的方法基本相同,同时还有新增的方法。readLine()函数的功能就是读入字符,知道遇到”\n”或”\r”为止。下面的实例讲解了readLine()方法是使用方法:
public static voidmain(String[] args) {
try {
FileReader fr = newFileReader("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test01.txt");
BufferedReader br = newBufferedReader(fr);
String a = br.readLine();
while (a != null) {
System.out.println(a);
a = br.readLine();
}
fr.close();
br.close();
} catch (Exception e) {
System.err.println(e);
}
}
4)、通过字符读取文件及写出
字符流读取文件时以单个字符为单位的。一般字符是由多个字节组成的。Java语言内部可将一个字节流转化为字符流,这种转化是有InputStreamReader和OutputStreamWriter来完成的。可以在生成InputStreamReader和OutputStreamWriter类的对象时指定编码规范,也可以使用当前平台的默认编码规范。
InputStreamReader类的构造函数如下:
InputStreamReader(InputStream in)//使用当前平台的默认编码规范
InputStreamReader(InutStream in , String charname)//指定编码规范
OutputStreamWriter类的构造函数如下:
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out , String charname)
下面通过实例讲解字节流向字符流转换的过程:
public static voidmain(String[] args) {
try {
FileInputStream fis = newFileInputStream("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test01.txt");
//将字节流文件转换为字符流文件
InputStreamReader isr = newInputStreamReader(fis, "GBK");
//带缓冲的字符流输入文件
BufferedReader br = new BufferedReader(isr);
FileOutputStream fos = newFileOutputStream("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test02.txt");
//将字节流文件转换为字符流文件
OutputStreamWriter osw = newOutputStreamWriter(fos , "GBK");
//带缓冲的字符流输出文件
BufferedWriter bw = newBufferedWriter(osw);
String str = br.readLine();
while (str != null) {
bw.write(str);
bw.flush();
System.out.println(str);
str = br.readLine();
}
br.close();
bw.close();
} catch (Exception e) {
System.out.println(e);
}
}
刚开始学的时候,大家通常会遇到打印出来的字符出现乱码的情况,这是由于源文件的编码问题或者字符流所指定的编码不支持引起的,在进行编码转换时,一定要看清楚源文件的编码和需要输出的编码,多试几个应该就没问题了。