A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

其实如果细说的话IO流中复制文件的方式可能要多于9种,但我在这里列出的9种复制方式应该是大家需要理解并掌握的,熟练掌握这9中复制文件的方法之后,你会觉得IO流其实不难。看过刘意(风清扬)老师视频的人可能都知道在写IO流程序的时候应该明确下面这3点:
<1>数据源(source):明确数据源是什么,一个文件?一个集合?网络?。。。。明确数据源是字符流还是字节流?如果不能明确那么就用字节流。
<2>目的地(target):明确数据的输出目标是什么?明确接收的数据是字符流还是字节流?如果不能明确就用字节流
<3>使用什么类型的流:根据传输数据的需求,明确到底使用哪一种流。

下面分两大类分别说明:
第一类:字节流
1.文件字节流:一次复制一个字节

  1. public class IODemo {
  2.         public static void main(String[] args) throws IOException {
  3.                 //定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 //创建输入输出流
  7.                 FileInputStream fis = new FileInputStream(source);
  8.                 FileOutputStream fos = new FileOutputStream(target);
  9.                 //定义一个变量用于传递数据
  10.                 int b = 0;
  11.                 while((b = fis.read()) != -1) {
  12.                         fos.write(b);
  13.                 }       
  14.                 //关闭资源
  15.                 fis.close();
  16.                 fos.close();
  17.         }
  18. }
复制代码
2.文件字节流:一次复制一个字节数组
  1. public class IODemo {
  2.         public static void main(String[] args) throws IOException {
  3.                 //定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 //创建输入输出流
  7.                 FileInputStream fis = new FileInputStream(source);
  8.                 FileOutputStream fos = new FileOutputStream(target);
  9.                 //定义一个变量用于传递数据
  10.                 byte[] bytes = new byte[1024];
  11.                 //定义一个变量记录每次读入字节数组数据的长度
  12.                 int len = 0;
  13.                 while((len = fis.read(bytes)) != -1) {
  14.                         fos.write(bytes, 0 ,len);
  15.                 }       
  16.                 //关闭资源
  17.                 fis.close();
  18.                 fos.close();
  19.         }
  20. }
复制代码
3.缓冲文件字节流:一次复制一个字节
  1. public class IODemo2 {
  2.         public static void main(String[] args) throws IOException {
  3.                 // 定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 // 创建缓冲输入输出流
  7.                 BufferedInputStream bis = new BufferedInputStream(
  8.                                 new FileInputStream(source));
  9.                 BufferedOutputStream bos = new BufferedOutputStream(
  10.                                 new FileOutputStream(target));
  11.                 //定义一个变量用于传递数据
  12.                 int b = 0;
  13.                 while((b = bis.read()) != -1) {
  14.                         bos.write(b);
  15.                 }       
  16.                 //关闭资源
  17.                 bis.close();
  18.                 bos.close();
  19.         }
  20. }
复制代码
4.缓冲文件字节流:一次复制一个字节数组
  1. public class IODemo2 {
  2.         public static void main(String[] args) throws IOException {
  3.                 // 定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 // 创建缓冲输入输出流
  7.                 BufferedInputStream bis = new BufferedInputStream(
  8.                                 new FileInputStream(source));
  9.                 BufferedOutputStream bos = new BufferedOutputStream(
  10.                                 new FileOutputStream(target));
  11.                 //定义一个变量用于传递数据
  12.                 byte[] bytes = new byte[1024];               
  13.                 //定义一个变量记录每次读入字节数组数据的长度
  14.                 int len = 0;
  15.                 while((len = bis.read(bytes)) != -1) {
  16.                         bos.write(bytes, 0, len);
  17.                 }       
  18.                 //关闭资源
  19.                 bis.close();
  20.                 bos.close();
  21.         }
  22. }
复制代码
第二类:字符流
1.文件字符流:一次读取一个字符
  1. public class IODemo {
  2.         public static void main(String[] args) throws IOException {
  3.                 //定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.txt");
  5.                 File target = new File("targetFile.txt");
  6.                 //创建输入输出流
  7.                 FileReader fr = new FileReader(source);
  8.                 FileWriter fw = new FileWriter(target);
  9.                 //定义一个变量用于传递数据
  10.                 int c;
  11.                 while((c = fr.read()) != -1) {
  12.                         fw.write(c);
  13.                 }       
  14.                 //关闭资源
  15.                 fr.close();
  16.                 fw.close();
  17.         }
  18. }
复制代码
2.文件字符流:一次读取一个字符数组
  1. public class IODemo {
  2.         public static void main(String[] args) throws IOException {
  3.                 //定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.txt");
  5.                 File target = new File("targetFile.txt");
  6.                 //创建输入输出流
  7.                 FileReader fr = new FileReader(source);
  8.                 FileWriter fw = new FileWriter(target);
  9.                 //定义一个变量用于传递数据
  10.                 char[] chars = new char[1024];
  11.                 int len = 0;
  12.                 while((len = fr.read(chars)) != -1) {
  13.                         fw.write(chars, 0, len);
  14.                 }       
  15.                 //关闭资源
  16.                 fr.close();
  17.                 fw.close();
  18.         }
  19. }
复制代码
3.缓冲文件字符流:一次读取一个字符
  1. public class IODemo2 {
  2.         public static void main(String[] args) throws IOException {
  3.                 // 定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 // 创建缓冲输入输出流
  7.                 BufferedReader br = new BufferedReader(
  8.                                 new FileReader(source));
  9.                 BufferedWriter bw = new BufferedWriter(
  10.                                 new FileWriter(target));
  11.                 //定义一个变量用于传递数据
  12.                 int c = 0;
  13.                 while((c = br.read()) != -1) {
  14.                         bw.write(c);
  15.                 }       
  16.                 //关闭资源
  17.                 br.close();
  18.                 bw.close();
  19.         }
  20. }
复制代码
4.缓冲文件字符流:一次读取一个字符数组
  1. public class IODemo2 {
  2.         public static void main(String[] args) throws IOException {
  3.                 // 定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 // 创建缓冲输入输出流
  7.                 BufferedReader br = new BufferedReader(
  8.                                 new FileReader(source));
  9.                 BufferedWriter bw = new BufferedWriter(
  10.                                 new FileWriter(target));
  11.                 //定义一个变量用于传递数据
  12.                 char[] chars = new char[1024];
  13.                 int len = 0;
  14.                 while((len = br.read(chars)) != -1) {
  15.                         bw.write(chars, 0, len);
  16.                 }       
  17.                 //关闭资源
  18.                 br.close();
  19.                 bw.close();
  20.         }
  21. }
复制代码
5.缓冲文件字符流:一次读取一行字符
  1. public class IODemo2 {
  2.         public static void main(String[] args) throws IOException {
  3.                 // 定义两个文件对象分别对应源文件,目标文件
  4.                 File source = new File("sourceFile.mp3");
  5.                 File target = new File("targetFile.mp3");
  6.                 // 创建缓冲输入输出流
  7.                 BufferedReader br = new BufferedReader(
  8.                                 new FileReader(source));
  9.                 BufferedWriter bw = new BufferedWriter(
  10.                                 new FileWriter(target));
  11.                 //定义一个变量用于传递数据
  12.                 String line = null;
  13.                 while((line = br.readLine()) != null) {
  14.                         bw.write(line);
  15.                         bw.newLine();
  16.                         bw.flush();
  17.                 }       
  18.                 //关闭资源
  19.                 br.close();
  20.                 bw.close();
  21.         }
  22. }
复制代码

以上为IO中9种复制文件的方式,希望与大家交流,谢谢。

1 个回复

倒序浏览
感觉分清要用字节和字符 就可以了 , 剩下的就是需不需要用缓冲 。  感觉没必要分这么细吧 。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马