IO流 第一部分 (OutputStreamWriter BufferOutputStream)
转换流
超类为Reader和Writer
是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
先将字符交给转换流,然后转换流去查询指定的编码表,然后将查询后的对应编码表中的内容返回给对应的字节流,然后字节流进行对应的操作
OutputStreamWriter
构造方法
-
OutputStreamWriter(OuputStream out) // 传递进来一个OuputStream(多态)
-
OutputStreamWriter(OutputStream out, String charsetName) String charsetName 传递编码表名字 GBK UTF-8
使用
FileOutputStream fos = new FileOutputStream("c:\utf.txt");
//创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
osw.write("你好");
osw.close();
InputSteamReader(字节流向字符)
先将通过InputStream类读取字符,然后给InputSteamReader , InputSteamReader 查询编码表然后转换成字符输出
构造方法
-
InputSteamReader(InputStream out)
-
InputSteamReader(InputStream out,String charsetName)
使用
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(字节输出流缓冲流)
构造方法
- BufferedOutputStream(OutputStream out)
使用
//创建字节输出流缓冲流的对象,构造方法中,传递字节输出流
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 (字节输入流缓冲流)
构造方法
- BufferedInputStream(InputStream in)
//创建字节输入流的缓冲流对象,构造方法中包装字节输入流,包装文件
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(字符输出流缓冲流)
构造方法
- BufferedWriter(Writer w)
BufferedWriter具有一个特殊的方法 newLine() 作用为换行 (平台无关性)
FileWriter fw = new FileWriter("c:\buffer.txt");
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(100);
bfw.newLine();
bfw.flush();
BufferedReader
构造方法
BufferedReader(Reader r)
有独特的方法 readLine() 读取一行 , 只返回行的有效字符,不包含 (即读出来的数据是一行)
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();