前言:


我们经常接触到的是复制单个文件或者是压缩好的一个较大的压缩文件,要是多级文件目录和文件怎么办?


通常使用的是递归复制,复制的时候先判定复制的是文件还是目录,是目录就递归生成目录,是文件就直接复制。



示例代码:

[Java] 纯文本查看 复制代码 ​​?​

010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

​import​​​​java.io.*;​


​/*​​​​*   多级目录的递归复制​​​​* */​​​​public​​​​class​​​​CopyFolders {​


​    ​​​​public​​​​static​​​​void​​​​main(String[] args) {​


​        ​​​​// 1.创建源文件所在的目录​​​​        ​​​​File src = ​​​​new​​​​File(​​​​"D:\\javaEE\\idea_workspase\\exam"​​​​);​


​        ​​​​// 2.创建要复制文件夹的目标目录​​​​        ​​​​File dest = ​​​​new​​​​File(​​​​"D:\\setup"​​​​);​


​        ​​​​// 3.进行文件目录或者文件复制​​​​        ​​​​copyFolders(src , dest);​​​​    ​​​​}​


​    ​​​​private​​​​static​​​​void​​​​copyFolders(File src, File dest) {​


​        ​​​​// 4.拼接要复制目标的目录​​​​        ​​​​File parent = ​​​​new​​​​File(dest, src.getName());​


​        ​​​​// 5.进行目录的创建​​​​        ​​​​parent.mkdirs();​


​        ​​​​// 6.获取源文件目录下面所有的子目录或者文件​​​​        ​​​​File[] files = src.listFiles();​


​        ​​​​// 7.进行遍历​​​​        ​​​​for​​​​(File file : files) {​


​            ​​​​// 8.判断是目录还是文件​​​​            ​​​​if​​​​(file.isDirectory()){​


​                ​​​​// 9.是目录 , 递归调用重新创建子目录​​​​                ​​​​copyFolders(file , parent);​


​            ​​​​}​​​​else​​​​{​


​                ​​​​// 10.是文件进行文件的复制​​​​                ​​​​// 11.拼接文件的目录和名称​​​​                ​​​​File dest_file = ​​​​new​​​​File(parent, file.getName());​


​                ​​​​// 12.进行文件的复制​​​​                ​​​​copyFile(file , dest_file);​​​​            ​​​​}​​​​        ​​​​}​​​​    ​​​​}​


​    ​​​​private​​​​static​​​​void​​​​copyFile(File file, File dest_file) {​


​        ​​​​try​​​​{​​​​            ​​​​// 13.创建输入流对象​​​​            ​​​​FileInputStream fis = ​​​​new​​​​FileInputStream(file);​


​            ​​​​// 14.创建输出流对象​​​​            ​​​​FileOutputStream fos = ​​​​new​​​​FileOutputStream(dest_file);​


​            ​​​​// 15.创建读取文件的数组​​​​            ​​​​byte​​​​[] bytes = ​​​​new​​​​byte​​​​[​​​​1024​​​​];​


​            ​​​​// 16.定义一次读取数组的长度​​​​            ​​​​int​​​​len = ​​​​0​​​​;​


​            ​​​​// 17.使用循环进行读取​​​​            ​​​​while​​​​((len = fis.read(bytes)) != -​​​​1​​​​) {​


​                ​​​​fos.write(bytes , ​​​​0​​​​, len);​​​​            ​​​​}​


​            ​​​​// 18.读取结束,关闭输入流和输出流​​​​            ​​​​fis.close();​​​​            ​​​​fos.close();​


​        ​​​​} ​​​​catch​​​​(IOException e) {​​​​            ​​​​e.printStackTrace();​​​​        ​​​​}​​​​    ​​​​}​​​​}​




小结:

copyFolders(src , dest)方法是递归需要执行的方法,如果是文件的目录就生成目录,如果是文件就复制

更多学习资料可关注:itheimaGZ获取