java——用递归和IO流来实现文件的复制

 1 import java.io.ByteArrayInputStream;
 2 import java.io.ByteArrayOutputStream;
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.OutputStream;
 9
10 /**
11  * 文件的复制:
12  *         思路:通过递归实现文件目录的复制,通过流的来复制文件。
13  *         方法:
14  *             1.遍历目录和文件,如果为目录则先复制目录及其子目录到指定目录下。
15  *             2.如果非目录则通过流的形式将该目录下的文件复制到指定目录下。
16  *             3.调用自身方法,实现递归。
17  *             4.如此实现复制目录及其目录下的所有子目录和文件到指定目录下。
18  *         用到的技术:
19  *             用File类来实现文件目录的复制。IO流来实现文件文本的复制
20  * @author user
21  *
22  */
23
24 public class CopyFileTest {
25
26     public static void main(String[] args) {
27         String srcPath = "E:\\Workspaces\\day16";
28         String destPath = "F:\\Workspaces\\day16";
29         File src = new File(srcPath);        //源文件
30         File dest = new File(destPath);        //目的文件
31
32         try {
33             copyFolder(src, dest);
34         } catch (IOException e) {
35             // TODO Auto-generated catch block
36             e.printStackTrace();
37         }
38         System.out.println("程序执行完毕");
39     }
40
41     private static void copyFolder(File src, File dest) throws IOException {
42         if (src.isDirectory()) {            //判读是否目录
43             if (!dest.exists()) {            //判断路径名是否存在
44                 dest.mkdirs();                //创建文件目录及其子目录
45             }
46             //src.list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
47             String files[] = src.list();    //创建字符串数组,存储文件路径
48             //遍历文件目录
49             for (String file : files) {
50                 //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
51                 File srcFile = new File(src, file);
52                 File destFile = new File(dest, file);
53                 // 递归复制
54                 copyFolder(srcFile, destFile);
55             }
56         } else {
57             //创建流对象
58             InputStream in = new FileInputStream(src);
59             OutputStream out = new FileOutputStream(dest);
60
61             //创建一个byte数组用做缓冲区
62             byte[] buffer = new byte[1024];
63
64             //将数据加入buffer数组
65             in.read(buffer);
66
67             //将数据加载入缓存区中
68             ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
69
70             //实例化一个ByteArrayOutputStream
71             ByteArrayOutputStream bos = new ByteArrayOutputStream();
72
73             //定义一个字符串数据
74             String str = bis.toString();
75             //定义一个byte[]数组
76             byte[] b = str.getBytes();
77             //将b的内容拷贝到缓冲区
78             bos.write(b, 0, b.length);
79             //获取当前缓冲区的大小
80             System.out.println(bos.size());
81
82             //将缓冲区的数据写入到OutputStream中
83             bos.writeTo(out);
84
85             //关闭流
86             in.close();
87             out.close();
88         }
89     }
90
91 }
时间: 2024-12-28 01:34:27

java——用递归和IO流来实现文件的复制的相关文章

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入输出

利用字节流和字节数组流是实现文件的复制

package ioxuexi; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;i

重踏学习Java路上_Day20(递归,IO流)

1:递归(理解)     (1)方法定义中调用方法本身的现象        举例:老和尚给小和尚讲故事,我们学编程    (2)递归的注意事项:        A:要有出口,否则就是死递归        B:次数不能过多,否则内存溢出        C:构造方法不能递归使用    (3)递归的案例:        A:递归求阶乘        B:兔子问题        C:递归输出指定目录下所有指定后缀名的文件绝对路径        D:递归删除带内容的目录(小心使用) 2:IO流(掌握)  

Java笔记(20):IO流(02)

1.递归概述和注意事项 /* * 递归:方法定义中调用方法本身的现象 * * 方法的嵌套调用,这不是递归. * Math.max(Math.max(a,b),c); * * public void show(int n) { * if(n <= 0) { * System.exit(0); * } * System.out.println(n); * show(--n); * } * * 注意事项: * A:递归一定要有出口,否则就是死递归 * B:递归的次数不能太多,否则就内存溢出 * C:构

java IO流实现删除文件夹以及文件夹中的内容

这篇主要是对IO文件流对文件常用处理中的删除文件夹,平时我们直接删除文件夹既可以删除里面的全部内容. 但是java在实现删除时,只能是文件才会被删除. 所以这里需要定义一个方法,来递归调用方法(递归调用,就是在方法的内部调用自己),实现文件夹里面的全部文件删除 注意:做这个测试的时候,一定要备份,如果删除成功就不会回复了 结果如下:

java(十一)IO流

深度遍历演示: package day22; import java.io.File; public class FileTest { /** * 需求:对指定目录进行所有内容的列出.(包含子目录,前面学的都只能列出当前目录内容,子目录不行) * 也可以理解为深度遍历. */ public static void main(String[] args) { File dir=new File("e:\\javatest"); listAll_2(dir,0); } public sta

Java笔记(19):IO流(01)

1.try...catch的方式处理异常1 1 package cn.itcast_02; 2 3 /* 4 * 异常:程序出现了不正常的情况. 5 * 6 * 程序的异常:Throwable 7 * 严重问题:Error 我们不处理.这种问题一般都是很严重的,比如说内存溢出. 8 * 问题:Exception 9 * 编译期问题:不是RuntimeException的异常 必须进行处理的,因为你不处理,编译就不能通过. 10 * 运行期问题:RuntimeException 这种问题我们也不处

java高级特性之IO流

缓冲流 转换流 对象流 打印流 标准输入输出流 随机访问流 数组流 有关flush():所有的处理流的输出流,最外层流需要刷新. javaIO流 1认识File类 File类的对象表示一个文件或者一个文件目录 绝对路径:包含盘符的文件完整路径 相对路径:在当前路径下的文件路径 File类中的方法,涉及到文件或文件目录的新建.删除.获取文件的路径.获取文件的大小.并没有涉及到向文件中写入或读出内容.这样的读取或写入的功能就需要IO流来完成 一般通过将File类的对象作为参数传递到流的构造器中,作为

Java中常见的IO流及其使用

Java中IO流分成两大类,一种是输入流,所有的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源,我们可以通过输入流的read方法读取字节数据:另一种是输出流,所有的输出流都直接或间接继承自OutputStream抽象类,输出流接收数据,可以通过write方法写入字节数据.在Java的IO流类中,大部分的输入流和输出流都是成对存在的,即如果存在XXXInputStream,那么就存在XXXOutputStream,反之亦然.(SequenceInputStream和St