为什么出现字符流?因为字节流操作中文不是特别方便,所以Java就提供字符流;字符流=字节流+编码表;字节流复制文本文件时也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别中文呢?是因为汉字在存储时无论选择哪种编码存储,第一个字节都是负数。
字符流写数据的五种方式:
write(int c); 写一个字符
public class demo {
public static void main(String[] args) throws IOException {
//FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo");
FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
OutputStreamWriter ow = new OutputStreamWriter(fos);
(97);
();
(98);
();
}
}
write(char[] cbuf); 写一个字符数组
public class demo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
OutputStreamWriter ow = new OutputStreamWriter(fos);
char [] ch ={97,98,99,100};
(ch);
();
}
}
write(char[] cbuf,int off, int len);写一个字符数组的一部分
public class demo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
OutputStreamWriter ow = new OutputStreamWriter(fos);
char [] ch ={97,98,99,100};
(ch,0,2);
();
}
}
write(String str);写一个字符串
public class demo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
OutputStreamWriter ow = new OutputStreamWriter(fos);
("chengzi");
();
}
}
write(String str,int off , int len);写一个字符串的一部分
public class demo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
OutputStreamWriter ow = new OutputStreamWriter(fos);
("chengzi",0,5);
();
}
}
flush方法和close方法的区别:close释放资源前进行一次刷新流,close执行后不能在写内容;而flush是刷新流,执行完毕依旧可以写内容;
字符流读数据两种方式:
read();一次读取一个字符数据
public class demo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo\\.");
InputStreamReader ir = new InputStreamReader(fis);
int ch;
while ((ch=())!=-1){
((char)ch);
}
}
}
read(char[] cbuf);一次读取一个字符数组数据
public class demo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo\\.");
InputStreamReader ir = new InputStreamReader(fis);
char [] cha = new char[1024];
int len;
while ((len=(cha))!=-1){
(new String (cha,0,len));
}
}
}
字符流复制文件案例:
public class demo {
public static void main(String[] args) throws IOException {
InputStreamReader sr = new InputStreamReader(new FileInputStream("D:\\wkx\\shangluo\\."));
OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("D:\\wkx\\shangluo\\橙子.txt"));
char [] ch = new char[1024];
int len;
while ((len=(ch))!=-1){
(new String(ch,0,len));
}
();
();
}
}
简洁:
public class demo {
public static void main(String[] args) throws IOException {
FileReader sr = new FileReader("D:\\wkx\\shangluo\\.");
FileWriter os = new FileWriter("D:\\wkx\\shangluo\\橙子.txt");
int ch;
while ((ch=())!=-1){
((char)ch);
}
();
();
}
}
字符缓冲流:
BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或使用默认,默认可用于大多数用途;
BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或使用默认,默认可用于大多数用途;
构造方法:BufferedWriter(Writer out); BufferedReader(Reader in);
public class demo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("D:\\wkx\\shangluo\\."));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wkx\\shangluo\\橙子.txt"));
char [] ar = new char[1024];
int len;
while ((len=(ar))!=-1){
(new String(ar,0,len));
}
();
();
}
}
使用缓冲流复制文件效率更高;
字符缓冲流特有功能:
BufferedWriter: void newLine():写一行行分隔符,行分隔符字符串由系统属性定义
BufferedReader: public String readLine():读一行文字,结果包含行的内容的字符串,不包含任何终止字符,如果流的结尾已经到达,则为null
public class demo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("D:\\wkx\\shangluo\\."));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wkx\\shangluo\\橙子.txt"));
String len;
while ((len=())!=null){
(len);
();
();
}
();
();
}
}