JAVA实现复制文件夹

  1 package com.filetest;
  2
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.File;
  6 import java.io.FileInputStream;
  7 import java.io.FileOutputStream;
  8 import java.io.IOException;
  9 import java.util.Scanner;
 10
 11 public class copyfile {
 12
 13     public static void main(String args[]) throws IOException{
 14
 15         copy();            //调用复制函数
 16         System.out.println("复制完成!");    //提示复制完成
 17     }
 18
 19     private static void copy() throws IOException {
 20
 21         System.out.println("输入你要复制的文件路径及名称:");
 22         Scanner scanner=new Scanner(System.in);
 23         String oldpath=scanner.next();        //接收原文件夹路径及名称
 24
 25         File ofile=new File(oldpath);
 26         if((!ofile.exists()||!ofile.isDirectory())){    //判断源文件夹路径是否存在
 27
 28             if(oldpath.equals("end"))                    //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
 29             {
 30                 System.out.println("程序结束,感谢使用!");
 31                 System.exit(-1);
 32             }
 33             else
 34             {
 35                 System.out.println("输入的源文件夹路径不存在,请重新输入!(输入end退出程序)");
 36                 copy();
 37             }
 38
 39         }
 40
 41         System.out.println("输入你要复制该文件到哪个路径:");
 42         String newpath=scanner.next();        //接收目标文件夹路径及名称
 43
 44         File nfile=new File(newpath);
 45         if(!nfile.isAbsolute()){    //判断目标文件夹路径是否为目录
 46             if(newpath.equals("end"))                    //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
 47             {
 48                 System.out.println("程序结束,感谢使用!");
 49                 System.exit(-1);
 50             }
 51             else
 52             {
 53                 System.out.println("输入的目标文件夹目录格式不正确,请重新输入!(输入end退出程序)");
 54                 copy();
 55             }
 56
 57         }
 58
 59         //截取源文件夹路径最后的名字
 60         String laststr  = oldpath.substring(oldpath.lastIndexOf("/"), oldpath.length());
 61         copyDirectiory(oldpath,newpath+"/"+laststr);  //将原路径文件夹名称和目标路径文件夹名称传递给复制文件夹函数
 62
 63
 64     }
 65
 66
 67     //用缓冲流复制文件函数
 68     public static void copyFile(File sourceFile,File targetFile)
 69             throws IOException{
 70                     // 新建文件输入流并对它进行缓冲
 71                     FileInputStream input = new FileInputStream(sourceFile);
 72                     BufferedInputStream inBuff=new BufferedInputStream(input);
 73
 74                     // 新建文件输出流并对它进行缓冲
 75                     FileOutputStream output = new FileOutputStream(targetFile);
 76                     BufferedOutputStream outBuff=new BufferedOutputStream(output);
 77
 78                     int len;
 79                     while ((len =inBuff.read()) != -1)
 80                     {
 81                         outBuff.write(len);
 82                     }
 83                     // 刷新此缓冲的输出流
 84                     outBuff.flush();
 85
 86                     //关闭流
 87                     inBuff.close();
 88                     outBuff.close();
 89                     output.close();
 90                     input.close();
 91                 }
 92
 93
 94     // 复制文件夹函数
 95     public static void copyDirectiory(String sourceDir, String targetDir)
 96                         throws IOException {
 97
 98                         File aimfile=new File(targetDir);
 99                         if(!(aimfile).exists()){    //查看目录是否存在,不存在则新建
100                              aimfile.mkdirs();
101                         }
102
103                         if(sourceDir.equals(targetDir)){    //如果文件路径及文件名相同则覆盖
104                             System.out .println("文件已存在,是否覆盖(N退出/任意键继续)?");
105                             Scanner scanner=new Scanner(System.in);
106                             String NY=scanner.next();
107                             if(NY.equalsIgnoreCase("n")){    //如果不想覆盖 可退出程序
108                                 System.out.println("程序结束,感谢使用!");
109                                 System.exit(-1);
110                             }
111
112                         }
113
114                         // 获取源文件夹下的文件或目录
115                         File oldfile=new File(sourceDir);
116                         File[] file=oldfile.listFiles();
117
118                         for(int i=0;i<file.length;i++)
119                         {
120
121                             if (file[i].isFile()) //如果是文件,传递给copyFile()函数进行复制
122                                 {
123                                     //目标文件
124                                     File aim=new File(targetDir);
125                                     File targetFile=new File(aim.getAbsolutePath()+"/"+file[i].getName());
126                                     copyFile(file[i],targetFile);
127                                 }
128                             if (file[i].isDirectory()) //如果是文件夹,则递归调用
129                                 {
130                                     // 要递归复制的源文件夹
131                                     String soursefiles=sourceDir + "/" + file[i].getName();
132
133                                     // 要递归复制的目标文件夹
134                                     String aimfiles=targetDir + "/"+ file[i].getName();
135
136                                     copyDirectiory(soursefiles, aimfiles);
137                                 }
138                         }
139                 }
140         }

其实在复制单个文件的时候可以优化一下  用FileChannel比缓冲复制效率高三分之一。仅供大家参考。

JAVA实现复制文件夹

时间: 2024-08-02 06:06:07

JAVA实现复制文件夹的相关文章

java复制文件夹及所有子目录和文件

package text; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStrea

java 复制文件夹

//File.separator  斜杠使用 这个参数代替,解决java移植 到其其它平台兼容问题 String fsr=String.format("D:%sceshi", File.separator);//需要复制的文件夹 不包括ceshi String tsr=String.format("D:%sDownloads", File.separator);//需要复制到的文件夹 File f=new File(fsr); File t=new File(tsr

java 复制文件夹中epub、html、txt文件 (按原来文件夹存放)

原来文件夹中的文件:有epub/html/txt import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * 复制文件夹中所有包含.epub后缀的文件 * @author fibre * parameter SUFFIX = ".epub&qu

黑马程序员-JAVA学习之文件夹的复制和遍历所有文件

--------android培训.java培训.期待与你交流!-------- JAVA的文件夹复制由于不知道文件夹里面有多少文件夹,所以使用递归方法遍历里面的所有文件夹和文件,如果是文件,则直接复制到目标文件夹,如果是文件夹,则的目标地方创建对应的同名文件夹,由于文件有各种各样的类型,比如视频,文档,图片等.所以要用到的主要是字节流对象,而不是用字符流对象,在这里用到的几个类分别是 1.File类,文件和目录路径名的抽象表示形式.(即表示既可以是一个文件,也可以是一个文件夹,是一个有分隔符的

java复制文件夹中的所有文件和文件夹到另一个文件夹中

1.复制文件夹 public static void copyDir(String oldPath, String newPath) throws IOException { File file = new File(oldPath); String[] filePath = file.list(); if (!(new File(newPath)).exists()) { (new File(newPath)).mkdir(); } for (int i = 0; i < filePath.l

使用IO流对文件夹的复制(文件夹中带有子目录)

当我们要复制带有子目录的文件夹的时候,就必须使用递归,这样才能把全部的文件夹都复制到位 思路和步骤: 对于文件夹的复制,分2种情况               (1)当我们对文件进行遍历的时候,如果目标文件夹下的文件是个标准文件的话,我们就可以直接去做复制的动作,               (2)当目标文件中,是带有文件夹的文件,那么这个时候就需要对文件夹进行递归,直到最后它是个标准文件后,我们在做复制动作 有了上述的2种情况后,那么这个需求,需要提供2种方法,1是对标准文件的复制,2是对带有

javase复制文件夹

1 package com.copyfile; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 import org.junit.Test; 10 11 public class FileTraverse { 1

【Java】移动文件夹及其所有子文件与子文件夹

在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明: public static void moveFolder(String oldPath, String newPath) { //先复制文件 copyFolder(oldPath, newPath); //则删除源文件,以免复制的时候错乱 deleteDir(new File(oldPath)); } 不应该直接剪切文件,防止在剪切的时候出错,导致这样那样的问题. 在Java复制文件夹及其所有子文件与子文件夹,在<

使用IO流复制文件夹(包括子目录)

IO流用于处理设备上的数据(包括硬盘,内存,键盘录入). IO流可根据流向不同分为输入流和输出流,根据处理数据类型不同分为字节流和字符流. 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区别: a.读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节. b.处理对象不同:字节流能处理所有类型的数据(如图片.avi等),而字符流只能处理字符类型的数据. 结论: