一、IO流的概述
Java中对数据的操作是通过流的方式;
IO流用于处理设备之间的数据传输。
二、IO流的分类
三、使用常用的输入输出流对文件进行复制
1、字节流
(1)FileOutputStream 和 FileInputStream
FileOutStream :字节写入流,用字节流写入数据;
FileInputStream :字节读取流,用字节流读取数据。
复制文件代码:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
//创建可追加数据的输出流,原有的文件数据不会被覆盖
FileOutputStream fos = new FileOutputStream("test.txt",true);
FileInputStream fis = new FileInputStream("b.txt");
//创建字节缓冲一次读取1kb的数据
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
fos.close();
fis.close();
}
}
(2)BufferedOutputStream 和 BufferedInputStream
BufferedOutputStream :高效的字节写入流,它的底层创建了一个临时的字节缓冲区,提高了效率,减少了对文件的操作次数,创建高效的字节写入流时它的构造方法接收一个OutputStream类型的参数 。
BuffedInputStream :高效的字节读取流,它的底层创建了一个临时的字节缓冲区,提高了效率,减少了对文件的操作次数,创建高效的字节读取流时它的构造方法接收一个InputStream类型的参数 。
代码复制文件:
import java.io.*;
public class Test1 {
public static void main(String[] args) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c.txt"));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
int len = 0;
while ((len = bis.read()) != -1){
bos.write(len);
}
bis.close();
bos.close();
}
}
2、字符流
(1)OutputStreamWriter和InputStreamReader
OutputStreamWriter:是个转换流,字节流转换为字符流进行写入,构造方法参数是一个OutputStream类型的;
InputStreamReader:转换流,字节流转换为字符流进行读取,构造方法参数是一个InputStream类型的。
代码演示:
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("wang.txt"));
InputStreamReader reader = new InputStreamReader(new FileInputStream("test.txt"));
int len = 0;
while ((len = reader.read()) != -1){
writer.write(len);
writer.flush();
}
writer.close();
reader.close();
}
}
要注意的是字符流写完要刷新一下,不然写入的数据是没有的。
(3)BufferedReader和BufferedWriter
BufferedReader:高效的字符读取流,它的底层有个字符的缓冲区,可以提高读取的效率,减少了对文件的操作次数,它的构造方法接收一个Reader类型的参数;
BufferedWriter:高效的字符写入流,它的底层有字符缓冲区,可以提高写入的效率,减少对文件的操作次数,它的构造方法接收一个Writer类型的参数。
代码演示:
import java.io.*;
public class Test1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("kaer.txt")));
String line = null;
while ((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
}
(2)便捷类 FileReader和FileWriter
FileReader :在给定的文件中读取数据,构造方法传入一个File或者文件路径字符串类型;
FileWriter:根据给定的文件名参数或文件类型参数写入数据。
代码演示:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test2 {
public static void main(String[] args){
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
fileReader = new FileReader("b.txt");
fileWriter = new FileWriter("Diana.txt");
int len = 0;
while ((len = fileReader.read()) != -1){
fileWriter.write(len);
fileWriter.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
} try {
fileWriter.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
}