IO流概述
- IO流用来处理设备之间的数据传输
- Java对数据的操作是通过流的方式
IO流的分类
- 按数据流向
输入流:读入数据
输出流:写出数据 - 按数据类型
字节流:可传输任意类型的文件
字符流:适合传输文本类型的文件
常用IO流关系图
字节流的复制文件操作
- FileInputStream & FileOutputStream
@Test
public void test1() throws IOException {
InputStream in = new FileInputStream("D:/QQWhatsnew.txt");
OutputStream out = new FileOutputStream("out.txt");
byte[] bytes = new byte[1024];
int len;
while ((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
}
out.close();
in.close();
}
- BufferedInputStream & BufferedOutputStream
注:BufferedInputStream ,BufferedOutputStream对字节流进行了包装,实现了缓冲区功能
@Test
public void test2() throws IOException {
BufferedInputStream in = new BufferedInputStream(
new FileInputStream("D:/QQWhatsnew.txt"));
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream("out2.txt"));
byte[] bytes = new byte[1024];
int len;
while ((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
}
out.close();
in.close();
}
字符流复制文件操作
注:D:/QQWhatsnew.txt的编码为UTF-8
- FileReader & FileWriter
@Test
public void test3() throws IOException {
Reader reader = new FileReader("D:/QQWhatsnew.txt");
Writer writer = new FileWriter("out3.txt");
char[] chars = new char[1024];
int len;
while ((len=reader.read(chars))!=-1){
writer.write(chars,0,len);
}
writer.close();
reader.close();
}
- BufferedReader & BufferedWriter
注:BufferedReader ,BufferedWriter对字符流进行了包装,实现了缓冲区功能
@Test
public void test4() throws IOException{
BufferedReader reader = new BufferedReader(
new FileReader("D:/QQWhatsnew.txt"));
BufferedWriter writer = new BufferedWriter(
new FileWriter("out4.txt"));
char[] chars = new char[1024];
int len;
while ((len=reader.read(chars))!=-1){
writer.write(chars,0,len);
}
writer.close();
reader.close();
}
将字节流转换为字符流
- 不指定编码
@Test
public void test5() throws IOException {
Reader reader = new InputStreamReader(
new FileInputStream("D:/QQWhatsnew.txt"));
Writer writer = new OutputStreamWriter(
new FileOutputStream("out5.txt"));
char[] chars = new char[1024];
int len;
while ((len=reader.read(chars))!=-1){
writer.write(chars,0,len);
}
writer.close();
reader.close();
}
- 指定编码
这样 out6.txt 就以GBK的编码方式查看
@Test
public void test6() throws IOException {
Reader reader = new InputStreamReader(
new FileInputStream("D:/QQWhatsnew.txt"),"Utf-8");
Writer writer = new OutputStreamWriter(
new FileOutputStream("out6.txt"),"GBK");
char[] chars = new char[1024];
int len;
while ((len=reader.read(chars))!=-1){
writer.write(chars,0,len);
}
writer.close();
reader.close();
}