字节流与字符流的区别
- 字符流
处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。
字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!
如果是关系到中文(文本)的,用字符流好点。
可用于任何类型的对象,包括二进制对象 - 字节流
处理单元为1个字节,操作字节和字节数组。
不能直接处理Unicode字符
如果是音频文件、图片、歌曲,就用字节流好点
只能处理字符或者字符串
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。
输出流——FileWriter
//创建写的流对象
//FileWriter(String fileName)
//String fileName:文件的路径
FileWriter fw=new FileWriter("aa.txt");
//写一个字符串
fw.write("hello");
//写一个字符
fw.write(65);
//字符数组
char [] chs={'w','o','r','l','d'};
fw.write(chs);
//写字符数组的一部分
fw.write(chs,1,3);
//换行
fw.write(System.lineSeparator());
//刷新,把缓存区的东西写到磁盘中
fw.flush();
//涉及到io类属于底层资源,关闭资源
fw.close();
输出流——BufferedWriter
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
//创建高效流对象
//BufferedWriter(FileWriter out)
//使用基类流创建高层流
// FileWriter fw=new FileWriter("buffer.txt");
BufferedWriter bw=new BufferedWriter(new FileWriter("buffer.txt"));
//写
bw.write("hello");
//换行
bw.newLine();
bw.write("java");
bw.newLine();
bw.flush();
bw.close();
}
}
输入流——FileReader
//创建读的流对象
//FileReader(String fileName)
//如果文件不存在会报系统文件不存在的异常,FileNotFoundException
FileReader fr=new FileReader("aa.txt");
//循环读
int read=fr.read();
while(read!=-1){
System.out.print((char)read);
//继续读
read=fr.read();
}
//字符数组读
//先定义一个空的字符数组
char [] chs=new char[10];
int len;
while((len=fr.read(chs))!=-1){
//展示,char [] -->String
System.out.print(new String(chs,0,len));
}
//关闭资源
fr.close();
}
// 复制
//读
FileReader fr=new FileReader("aa.txt");
//写
FileWriter fw=new FileWriter("copy2.txt");
//边读边写
/* int read;
while((read=fr.read())!=-1){
fw.write(read);
}*/
//字符数组读
char [] chs=new char[10];
int len;
while((len=fr.read(chs))!=-1){
//读多少就写多少
fw.write(chs,0,len);
}
fw.flush();
fw.close();//注意顺序
fr.close();
输入流——BufferedReader
//一行一行的读
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();