输入/出字符流
输入/出字符流
①Reader输出字符流
②Writer输出字符流
特点
①读写内容是字符
②是抽象类
③是字符流的根类
④读取的文件是文本文件
API
①int read() :读取文本文件内容,每次读取一个字符(char),将char的字符无符号扩展,扩展为32位,使用低16位存储字符
②void write(int) :将整形的低16位,以字符的形式写入到文件中
③void close()
文件输入/出字符流
文件输入输出字符流
①FileReader文件输入字符流
②FileWriter文件输出字符流
特点
读数据方式是字符,属于节点流
API
package IODemo;
/*
文件拷贝
*/
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileRederDemo {
public static void main(String[] args) throws IOException {
//1.获取文件路径
String path = "C:\\Users\\Gypsophila\\Desktop";
//2.创建文件输入字符流
FileReader reader = new FileReader(path+"\\test2.txt");
//3.输出字符流
FileWriter writer = new FileWriter(path+"\\test3.txt");
while(true){
//4.读取文件内容
int buf = reader.read();
//5.结束循环
if(buf == -1){
System.out.println("拷贝完成");
break;
}
//6.将字符写入到文件中
writer.write(buf);
//7.清空缓存区
writer.flush();
}
//8.关闭管道流
reader.close();
writer.close();
}
}
转换字符流
字符集
①Ascll:只能表示键盘的键位
②GBK/GB2312:中文操作系统默认GBK
③utf-8:适用于网络传输,英文1个字节,拉丁文2个字节,中文,日文,韩文3个字节表示
④ISO8859-1欧洲的通用标准
⑤unicode:使用2个字节表示世界上所有文字
转换字符流
①InputStreamReader 将字节转换成字符
②OutputStreamWriter 将字符转换成字节
API
package IODemo;
/*
拷贝文件
*/
import java.io.*;
public class changeStreamReaderDemo {
public static void main(String[] args) throws IOException {
//1.获取文件路径
String str = "C:\\Users\\Gypsophila\\Desktop";
//2.创建的是字节流--->字符流
InputStreamReader reader = new InputStreamReader(new FileInputStream(str+"\\test1.txt"),"GBK") ;
//3.创建一个输出字节流--->字符流
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(str+"\\test5.txt"),"GBK") ;
//4.边读边写
char[] buf = new char[1024];
while(true){
int len = reader.read(buf);
if(len == -1){
break;
}
writer.write(buf,0,len);
writer.flush();
}
//5.关闭
reader.close();
writer.close();
}
}
缓冲字符流
缓冲字符流
①构造:BufferedInputStream 缓冲字节流
BufferedOutputStream 缓冲字节流
2.特点:属于处理流,起到缓冲的数据的作用,默认缓冲区8k
3.字符流和字节流对比
①缓冲字节流:读取或写入一个数组的大小
②缓冲字符流:每次读取或者写入一行
4.API
String readLine() 每次读取一行字符,如果返回null,代表文件结束
打印字符流
1.构造:PrinterWriter
2.特点:即使节点流又是处理流
3.API
①void write(String s) 输出字符串
②PrintWriter append(String s) 向输出流追加字符串
③void println(String s) 打印字符串并且输出换行
④void flush() 刷出缓冲区数据
字符串字符流
package IODemo;
import java.io.*;
public class PrintlnWriterDemo {
public static void main(String[] args) throws IOException {
//1.获取文件路径
String str = "C:\\Users\\Gypsophila\\Desktop";
//2.创建输入流
BufferedReader br = new BufferedReader(new FileReader(str+"\\test1.txt"));
//3.创建输出流
PrintWriter pw = new PrintWriter(new FileWriter(str+"\\test4.txt"));
//4.边读边写
while(true){
//5.读入一行(\n)
String data = br.readLine();
//6.退出条件
if(data == null){
break;
}
//7.写出数据
pw.println(data);
//8.刷出数据
pw.flush();
}
//9.关闭管道流
br.close();
pw.close();
}
}