超类为Reader和Writer
是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
先将字符交给转换流,然后转换流去查询指定的编码表,然后将查询后的对应编码表中的内容返回给对应的字节流,然后字节流进行对应的操作
构造方法
使用
FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
//创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
osw.write("你好");
osw.close();
先将通过InputStream类读取字符,然后给InputSteamReader , InputSteamReader 查询编码表然后转换成字符输出
构造方法
使用
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("d://deo2.txt"));
char[] b = new char[2];
int len = 0;
while((len = inputStreamReader.read(b))!=-1){
System.out.println(new String(b,0,len));
}
inputStreamReader .close();
子类可以直接操作文件,但是不能指定编码格式,默认使用系统默认的格式
FileReader fr = new FileReader("a.txt");
构造方法
使用
//创建字节输出流缓冲流的对象,构造方法中,传递字节输出流
BufferedOutputStream bos = new
BufferedOutputStream(new FileOutputStream("c:\\buffer.txt"));
bos.write(55);
byte[] bytes = "HelloWorld".getBytes();
bos.write(bytes);
bos.write(bytes, 3, 2);
bos.close();
构造方法
//创建字节输入流的缓冲流对象,构造方法中包装字节输入流,包装文件
BufferedInputStream bis = new
BufferedInputStream(new FileInputStream("c:\\buffer.txt"));
byte[] bytes = new byte[10];
int len = 0 ;
while((len = bis.read(bytes))!=-1){
System.out.print(new String(bytes,0,len));
}
bis.close();
构造方法
BufferedWriter具有一个特殊的方法 newLine() 作用为换行 (平台无关性)
FileWriter fw = new FileWriter("c:\\buffer.txt");
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(100);
bfw.newLine();
bfw.flush();
构造方法
BufferedReader(Reader r)
有独特的方法 readLine() 读取一行 , 只返回行的有效字符,不包含\r\n (即读出来的数据是一行)
int lineNumber = 0;
//创建字符输入流缓冲流对象,构造方法传递字符输入流,包装数据源文件
BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
//调用缓冲流的方法 readLine()读取文本行
//循环读取文本行, 结束条件 readLine()返回null
String line = null;
while((line = bfr.readLine())!=null){
lineNumber++;
System.out.println(lineNumber+" "+line);
}
bfr.close();
通过字符流缓冲区流复制文本文件
BufferedReader bfr = new BufferedReader(new FileReader("c:\\w.log"));
BufferedWriter bfw = new BufferedWriter(new FileWriter("d:\\w.log"));
//读取文本行, 读一行,写一行,写换行
String line = null;
while((line = bfr.readLine())!=null){
bfw.write(line);
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();