OutputStreamReader: 字符输出流
//字符输入流、输出流编码与解码
public class OutAndInpuStreamDemo2 {
public static void main(String[] args) throws IOException {
//字符输出流写数据,默认编码格式utf-8
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:\\test\\java.txt"));
osw.write("中国");
osw.close();
//字符输出流写数据,指定编码格式GBK
OutputStreamWriter osw1 = new OutputStreamWriter(new FileOutputStream("f:\\test\\ps.txt"),"GBK");
osw1.write("中华人民共和国");
osw1.close();
//符输入流读数据,默认编码格式utf-8
InputStreamReader isr = new InputStreamReader(new FileInputStream("f:\\test\\java.txt"));
int bys;
while((bys=isr.read())!=-1){
System.out.print((char)bys);
}
isr.close();
//符输入流读数据,指定编码格式GBK
InputStreamReader isr1 = new InputStreamReader(new FileInputStream("f:\\test\\ps.txt"),"GBK");
int bys1;
while((bys1=isr1.read())!=-1){
System.out.print((char)bys1);
}
isr1.close();
}
}
字符流写数据的5种方式
//字符流写数据的5种方式
public class OutAndInpuStreamDemo3 {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:\\test\\ps.txt"));
//第一种方式写数据:写字符数据
/* osw.write(97);//写数据是字节流,创建的字符流对象相对字节流来说是有缓冲的,所以要进行刷新才能写入
osw.flush();//刷新流的缓冲
osw.close();//先刷新缓冲,再关闭流,:怕忘记手动调用刷新flush()*/
//第二种:写入一个字符数组
/*char[] chs = {'a','b','c','d','e','f'};
osw.write(chs);
osw.close();*/
//第三种:写入一个字符数组的一部分数据
/* char[] chs1 = {'a','b','c','d','e','f'};
//osw.write(chs1,0,chs1.length);//从0索引开始,写到字符数组的最大索引结束
osw.write(chs1,2,4);//从2索引开始,写到字符数组的4索引结束
osw.close();*/
//第四种:写一个字符串数据
/*osw.write("abcde");
osw.close();*/
//第五种:写一个字符串数据的一部分
osw.write("abcdefghijklm",2,5);
osw.close();
}
}
字符流读取数据的2种方式
//字符流读数据的2种方式
public class OutAndInpuStreamDemo4 {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("f:\\test\\ps.txt"),"GBK");
//第一种方式:一次读一个字符数据
/* int ch;
while((ch=isr.read())!=-1){
System.out.print((char)ch);
}*/
//第二种方式:一次读一个字符数组
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
isr.close();
}
}
字符流对象复制文件的2种方式
//字符流对象:复制文件2种方式
public class OutAndInpuStreamDemo5 {
public static void main(String[] args) throws IOException {
//根据数据源创建字符输入流对象
InputStreamReader isr = new InputStreamReader(new FileInputStream("f:\\test\\ps.txt"),"GBK");
//根据数据源创建字符输出流对象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:\\test1\\copy.txt"),"GBK");
//读写数据、复制文件
//第一种方式:一次读写一个字符数据
/*int ch;
while((ch=isr.read())!=-1){
osw.write(ch);
}*/
//第二种方式:一次读写一个字符数组
char[] chr = new char[1024];
int len;
while((len=isr.read(chr))!=-1){
osw.write(chr,0,len);
}
isr.close();
osw.close();
}
}
字符流对象复制文件(升级版)
1、InputStreamReader子类FileReader 可以替代读取文件,涉及编码格式还是需要InputStreamReader处理
2、OutputStreamWriter子类FileWriter可以替代写入文件,涉及编码格式还是需要OutputStreamWriter处理
//字符流对象:复制文件改进版
public class OutAndInpuStreamDemo6 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("f:\\test\\js.txt");
FileWriter fw = new FileWriter("f:\\test1\\copy.txt");
//第一种方式:一次读写一个字符数据
/*int len;
while((len=fr.read())!=-1){
fw.write(len);
}
fr.close();
fw.close();*/
//第二种方式:一次读写一个字符数组
char[] chs = new char[1024];
int len;
while((len=fr.read())!=-1){
fw.write(chs,0,len);
}
fr.close();
fw.close();
}
}
字符缓冲流读写文件
1、BufferedWriter:字符输出缓冲流 ,默认大小8192
2、BufferedReader:字符输入缓冲流,默认大小8192
//字符缓冲流
public class OutAndInpuStreamDemo7 {
public static void main(String[] args) throws IOException {
//字符缓冲输出流
/* BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\aa.txt"));
bw.write("hello\r\n");
bw.write("world\r\n");
bw.write("beijing\r\n");
bw.close();*/
//字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("f:\\test\\aa.txt"));
//第一种方式:读取单个字节
/*int ch;
while((ch=br.read())!=-1){
System.out.print((char)ch);
}
br.close();*/
//第二种方式:读取一个字节数组
int len;
char[] chs = new char[1024];
while((len=br.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
br.close();
}
}
字符缓冲流复制文件
//字符缓冲流复制文件
public class OutAndInpuStreamDemo8 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("f:\\test\\aa.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test1\\aa.txt"));
//第一种方式:一次读取一个字节
int bys;
while((bys=br.read())!=-1){
bw.write(bys);
}
//第二种方式:一次读取一个字节数组
int len;
char[] chs = new char[1024];
while((len=br.read(chs))!=-1){
bw.write(chs,0,len);
}
br.close();
bw.close();
}
}
字符缓冲流特有功能
1、newLine(): 换行
2、readLine(): 读取一行文字,读到null就结束
//字符缓冲流特有方法
public class OutAndInpuStreamDemo9 {
public static void main(String[] args) throws IOException {
//字符缓冲输出流特有方法:newLine()
BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\ps.txt"));
for(int i=0;i<10;i++){
bw.write("hello"+i);
//bw.write("\r\n");//传统换行需要根据系统来定
bw.newLine();//特有方法换行会自动识别系统
bw.flush();//刷新
}
bw.close();
//字符缓冲输入流特有方法:readLine()
BufferedReader br = new BufferedReader(new FileReader("f:\\test\\ps.txt"));
String line;
while((line=br.readLine())!=null){
System.out.println(line);//只读换行,不读换行符号
}
br.close();
}
}
20、 字符缓冲流特有功能改进复制文件
//最常用的方式
//字符缓冲流特有功能改进复制文件案例
public class OutAndInpuStreamDemo10 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("f:\\test\\ps.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test1\\ps.txt"));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
}