博客名称 |
---|
Java-(中级) |
IO-FileReader(Writer)-字符流
java.io.Writer 继承者 java.io.OutputStreamWriter 继承者 java.io.FileWriter
java.io.Reader 继承者 java.io.InputStreamReader 继承者 java.io.FileReader
由于我们常见的操作都是使用本地默认编码,所以,不用指定编码。
而转换流的名称有点长,所以,Java就提供了其子类供我们使用。
OutputStreamWriter = FileOutputStream + 编码表(GBK)
FileWriter = FileOutputStream + 编码表(GBK)
InputStreamReader = FileInputStream + 编码表(GBK)
FileReader = FileInputStream + 编码表(GBK)
需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中
数据源:
a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader
目的地:
b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter
代码演示:
public class FileReaderDemo {
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);
//刷新缓冲区
fw.flush();
}
//释放资源
fr.close();
fw.close();
//封装数据源
FileReader fr2 = new FileReader("a.txt");
//封装目的地
FileWriter fr3 = new FileWriter("c.txt");
//一次读取一个字符数组
char[] chars = new char[1024];
//返回实际读取的长度
int len = 0;
while ((len=fr2.read(chars))!=-1){
fr3.write(chars,0,len);
//刷新缓冲区
}
//关闭流
fr2.close();
fr3.close();
}
}
结果:b.txt和c.txt文件内容一样
package com.ginger.demo03;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
//默认字符集utf-8
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt"));
osw.write("中国");
osw.close();//中国
//OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("c.txt"), "gbk");
osw2.write("中国");//�й�
osw2.close();
}
}
需求:把D:\a.txt内容复制到E:\b.txt中
数据源:
c:\\a.txt -- FileReader
目的地:
d:\\b.txt -- FileWriter
代码演示
public class FileReaderDemo02 {
public static void main(String[] args) throws IOException {
//封装数据源
FileReader fr = new FileReader("D:\\a.txt");
//封装目的地
FileWriter fw = new FileWriter("E:\\b.txt");
//一次读取一个字符
//返回实际读取的值
int ch= 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
//关闭流
fr.close();
fw.close();
//封装数据源
FileReader fr2 = new FileReader("D:\\a.txt");
//封装目的地
FileWriter fw2 = new FileWriter("E:\\c.txt");
//一次读取要给字符数组
char[] chars = new char[1024];
//返回实际读取的长度
int len = 0;
while ((len=fr2.read(chars))!=-1){
fw2.write(chars,0,len);
//刷新缓冲区
fw2.flush();
}
//关闭流
fr2.close();
fw2.close();
}
}
结果:b.txt和c.txt的内容一样
package com.ginger.demo03;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
//默认字符集utf-8
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt"));
osw.write("中国");
osw.close();//中国
//OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("c.txt"), "gbk");
osw2.write("中国");//�й�
osw2.close();
}
}