OutputStreamWriter 字符输出流 public OutputStreamWriter(OutputStream out) public OutputStreamWriter(OutputStream out,String charsetName) InputStreamReader 字符输入流 public InputStreamReader(InputStream in) public InputStreamReader(InputStream in,String charsetName)
转换流读数据
public static void main(String[] args) throws IOException {
// 创建对象
// InputStreamReader isr =
//new InputStreamReader(new FileInputStream("osw.txt"));
// InputStreamReader isr =
//new InputStreamReader(new FileInputStream("osw.txt"), "GBK");
InputStreamReader isr =
new InputStreamReader(new FileInputStream("osw.txt"), "UTF-8");
// 读取数据
// 一次读取一个字符
int ch = 0;
while ((ch = isr.read()) != -1) {
System.out.print((char) ch);
}
// 释放资源
isr.close();
}
转换流写数据
public static void main(String[] args) throws IOException {
// 创建对象
//OutputStreamWriter osw =
//new OutputStreamWriter(
//new FileOutputStream("osw.txt")); // 默认GBK
//OutputStreamWriter osw =
//new OutputStreamWriter(
//new FileOutputStream("osw.txt"), "GBK"); // 指定GBK
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("osw.txt"), "UTF-8"); // 指定UTF-8
// 写数据
osw.write("中国");
// 释放资源
osw.close();
}
OutputStreamWriter写数据方法 public void write(int c) public void write(char[] cbuf) public void write(char[] cbuf,int off,int len) public void write(String str) public void write(String str,int off,int len) 字符流操作要注意的问题 flush()的作用 flush()和close()的区别public static void main(String[] args) throws IOException { // 创建对象 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( “osw2.txt”));
public static void main(String[] args) throws IOException {
// 创建对象
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("osw2.txt"));
// 写数据
// public void write(int c):写一个字符
// osw.write('a');
// osw.write(97);
// 为什么数据没有进去呢?
// 原因是:字符 = 2字节
// 文件中数据存储的基本单位是字节。
// void flush()
// public void write(char[] cbuf):写一个字符数组
// char[] chs = {'a','b','c','d','e'};
// osw.write(chs);
// public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
// osw.write(chs,1,3);
// public void write(String str):写一个字符串
// osw.write("我爱林青霞");
// public void write(String str,int off,int len):写一个字符串的一部分
osw.write("我爱林青霞", 2, 3);
// 刷新缓冲区
osw.flush();
// osw.write("我爱林青霞", 2, 3);
// 释放资源
osw.close();
// java.io.IOException: Stream closed
// osw.write("我爱林青霞", 2, 3);
}
InputStreamReader读数据方法 public int read() public int read(char[] cbuf)
public static void main(String[] args) throws IOException {
// 创建对象
InputStreamReader isr =
new InputStreamReader(new FileInputStream(
"StringDemo.java"));
// 一次读取一个字符
// int ch = 0;
// while ((ch = isr.read()) != -1) {
// System.out.print((char) ch);
// }
// 一次读取一个字符数组
char[] chs = new char[1024];
int len = 0;
while ((len = isr.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
}
// 释放资源
isr.close();
}
把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 把c:\a.txt内容复制到d:\b.txt中
/*
* 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中
*
* 数据源:
* a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader
* 目的地:
* b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter
*/
public class CopyFileDemo {
public static void main(String[] args) throws IOException {
// 封装数据源
InputStreamReader isr = new InputStreamReader(
new FileInputStream("a.txt"));
// 封装目的地
OutputStreamWriter osw =
new OutputStreamWriter(
new FileOutputStream("b.txt"));
// 读写数据
// 方式1
// int ch = 0;
// while ((ch = isr.read()) != -1) {
// osw.write(ch);
// }
// 方式2
char[] chs = new char[1024];
int len = 0;
while ((len = isr.read(chs)) != -1) {
osw.write(chs, 0, len);
// osw.flush();
}
// 释放资源
osw.close();
isr.close();
}
}
转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类。 FileWriter FileReader
OutputStreamWriter = FileOutputStream + 编码表(GBK)
FileWriter = FileOutputStream + 编码表(GBK)
InputStreamReader = FileInputStream + 编码表(GBK)
FileReader = FileInputStream + 编码表(GBK)
正常的字符流是需要对字节流进行包装的,而便捷字符流不需要我们手动进行字节流的包装,只要给文件路径字符串就可以了。
public static void main(String[] args) throws IOException {
// 封装数据源
FileReader fr = new FileReader("a.txt");
// 封装目的地
FileWriter fw = new FileWriter("b.txt");
// 一次一个字符
// int ch = 0;
// while ((ch = fr.read()) != -1) {
// fw.write(ch);
// }
// 一次一个字符数组
char[] chs = new char[1024];
int len = 0;
while ((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
fw.flush();
}
// 释放资源
fw.close();
fr.close();
}
FileWriter写数据 FileReader读取数据 FileWriter和FileReader实现文本文件的复制
public static void main(String[] args) throws IOException {
// 封装数据源
FileReader fr = new FileReader("a.txt");
// 封装目的地
FileWriter fw = new FileWriter("b.txt");
// 一次一个字符
// int ch = 0;
// while ((ch = fr.read()) != -1) {
// fw.write(ch);
// }
// 一次一个字符数组
char[] chs = new char[1024];
int len = 0;
while ((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
fw.flush();
}
// 释放资源
fw.close();
fr.close();
}