//1. 文件字节流复制文件
//字节流复制文件由于是直接读、写字节数据,任何文件底层都是字节。所以可以复制任何文件
FileInputStream fis = new FileInputStream("源文件");
FileOutputStream fos = new FileOutputStream("目标文件");
byte[] bytes = new byte[1024];
int l;//每次读取的字节个数
while ((l = fis.read(bytes)) != -1) {
fos.write(bytes, 0, l);
}
fis.close();
fos.close();
//2. 文件字符流复制文件*/
//字符流是专门用来对文本文件进行读、写的; 底层默认是使用了UTF-8编码方案,它默认读、写UTF-8编码格式的文本文件。
FileReader fed = new FileReader("源文件");
FileWriter fwt = new FileWriter("目标文件");
char[] chars = new char[1024];
int n;//每次读取的字节个数
while ((n = fed.read(chars)) != -1) {
fwt.write(chars, 0, n);
}
fed.close();
fwt.close();
/** 3. 字节缓冲流复制文件
* 原理:BufferedInputStream、BufferedOutputStream内部有一个8192个字节数组作为缓冲池
* 读数据是一次读8192个字节放在底层的数组中。写数据时是先写到底层的数组中,
* 写满8192个字节再一次性写到目标文件中。
* > 由于内存的读写性能比硬盘要高,同时也减少了对硬盘的读写次数。以此来提供整体的读写性能。
*/
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("源文件.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("目标文件.txt"));
byte[] bs1 = new byte[1024];
int m;
while ((m = bis.read(bs1)) != -1) {
bos.write(bs1, 0, m);
}
bis.close();
bos.close();
// 4. 字符缓冲流复制文件
// 使用字符缓冲流一次读取、写入一个字符数组
BufferedReader bde = new BufferedReader(new FileReader("源文件.txt"));
BufferedWriter bfd = new BufferedWriter(new FileWriter("目标文件.txt"));
char[] ch = new char[1024];
int len;
while ((len = bde.read(ch)) != -1) {
bfd.write(ch, 0, len);
}
bde.close();
bfd.close();
// 使用字符缓冲流一次读取、写入一行字符串
String str;
while ((str = bde.readLine()) != null) {
bfd.write(str);
bfd.newLine();
}
bde.close();
bfd.close();
/**
* 5. 转换流复制文件
* 由于字节流再读取、写入文本数据时,由于不同的编码方案对于汉字占用的字节数不一样的,
* 在读取文本数据时就不太方便。
* Java就帮我们提供了转换流,可以把字节流按照指定的编码格式转换为字符流,
* 再以字符流的形式来读取文件中的字符就可以避免乱码问题。
*/
//使用指定的字符集GBK来读取a.txt文件
InputStreamReader isr = new InputStreamReader(new FileInputStream("源文件.txt"), "GBK");
BufferedReader br = new BufferedReader(isr);
//使用指定的字符集UTF-8写b.txt文件
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("目标文件.txt"), "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
//一边读、一边写(一次读写一行)
String line; //记录每次读取的一行
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine(); //写换行符
}
//关闭流
br.close();
bw.close();
IO流体系总结
于 2023-06-23 22:11:57 首次发布