package com.filetest;

 import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner; public class copyfile { public static void main(String args[]) throws IOException{ copy(); //调用复制函数
System.out.println("复制完成!"); //提示复制完成
} private static void copy() throws IOException { System.out.println("输入你要复制的文件路径及名称:");
Scanner scanner=new Scanner(System.in);
String oldpath=scanner.next(); //接收原文件夹路径及名称 File ofile=new File(oldpath);
if((!ofile.exists()||!ofile.isDirectory())){ //判断源文件夹路径是否存在 if(oldpath.equals("end")) //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
{
System.out.println("程序结束,感谢使用!");
System.exit(-1);
}
else
{
System.out.println("输入的源文件夹路径不存在,请重新输入!(输入end退出程序)");
copy();
} } System.out.println("输入你要复制该文件到哪个路径:");
String newpath=scanner.next(); //接收目标文件夹路径及名称 File nfile=new File(newpath);
if(!nfile.isAbsolute()){ //判断目标文件夹路径是否为目录
if(newpath.equals("end")) //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
{
System.out.println("程序结束,感谢使用!");
System.exit(-1);
}
else
{
System.out.println("输入的目标文件夹目录格式不正确,请重新输入!(输入end退出程序)");
copy();
} } //截取源文件夹路径最后的名字
String laststr = oldpath.substring(oldpath.lastIndexOf("/"), oldpath.length());
copyDirectiory(oldpath,newpath+"/"+laststr); //将原路径文件夹名称和目标路径文件夹名称传递给复制文件夹函数 } //用缓冲流复制文件函数
public static void copyFile(File sourceFile,File targetFile)
throws IOException{
// 新建文件输入流并对它进行缓冲
FileInputStream input = new FileInputStream(sourceFile);
BufferedInputStream inBuff=new BufferedInputStream(input); // 新建文件输出流并对它进行缓冲
FileOutputStream output = new FileOutputStream(targetFile);
BufferedOutputStream outBuff=new BufferedOutputStream(output); int len;
while ((len =inBuff.read()) != -1)
{
outBuff.write(len);
}
// 刷新此缓冲的输出流
outBuff.flush(); //关闭流
inBuff.close();
outBuff.close();
output.close();
input.close();
} // 复制文件夹函数
public static void copyDirectiory(String sourceDir, String targetDir)
throws IOException { File aimfile=new File(targetDir);
if(!(aimfile).exists()){ //查看目录是否存在,不存在则新建
aimfile.mkdirs();
} if(sourceDir.equals(targetDir)){ //如果文件路径及文件名相同则覆盖
System.out .println("文件已存在,是否覆盖(N退出/任意键继续)?");
Scanner scanner=new Scanner(System.in);
String NY=scanner.next();
if(NY.equalsIgnoreCase("n")){ //如果不想覆盖 可退出程序
System.out.println("程序结束,感谢使用!");
System.exit(-1);
} } // 获取源文件夹下的文件或目录
File oldfile=new File(sourceDir);
File[] file=oldfile.listFiles(); for(int i=0;i<file.length;i++)
{ if (file[i].isFile()) //如果是文件,传递给copyFile()函数进行复制
{
//目标文件
File aim=new File(targetDir);
File targetFile=new File(aim.getAbsolutePath()+"/"+file[i].getName());
copyFile(file[i],targetFile);
}
if (file[i].isDirectory()) //如果是文件夹,则递归调用
{
// 要递归复制的源文件夹
String soursefiles=sourceDir + "/" + file[i].getName(); // 要递归复制的目标文件夹
String aimfiles=targetDir + "/"+ file[i].getName(); copyDirectiory(soursefiles, aimfiles);
}
}
}
}

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

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

  1. java递归复制文件夹

    package com.haiyisoft.hyoaService; import java.io.BufferedInputStream;import java.io.BufferedOutputS ...

  2. 星涛:采用java递归复制文件夹

    package com.botao; import java.io.*; /** * @author cbt28 */ public class FileUtil { public static St ...

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

    package text; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

  4. Java实现复制文件或者文件夹

    拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等. 话不多说直接上代码 import java.io.*; /** * 实现文件的拷贝 */ public cl ...

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

    1.复制文件夹 public static void copyDir(String oldPath, String newPath) throws IOException { File file = ...

  6. java-FileUtils(复制文件夹、复制文件、字符串直接写入文件中)(新手)

    实例: lx1: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; pu ...

  7. CMD复制文件夹

    CMD复制文件夹 xcopy /E/I/Y "D:\GitHub\WIP\app" "D:\GitHub\WIP_server\html\webshell"

  8. Web 在线文件管理器学习笔记与总结(13)重命名文件夹(14)复制文件夹

    (13)重命名文件夹 ① 重命名文件夹通过 rename($oldname,$newname) 实现 ② 检测文件夹名是否符合规范 ③ 检测当前目录中是否存在同名文件夹名称,如果不存在则重命名成功 i ...

  9. c# 封装的文件夹操作类之复制文件夹

    c#  封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...

随机推荐

  1. Linux/CentOS优化配置 汇总

    [强烈要求做的]CentOS启用sudo,禁用root远程登录 Linux命令行修改IP.网关.DNS.主机名 的方法 Linux开机直接进入“命令行”模式 更改CentOS 6.x yum源为国内1 ...

  2. Shell入门教程:算术运算

    Bash的算术运算有以下几种方法: 序号 名称 语法 范例 1 算术扩展 $((算术式)) r=$((2+5*8)) 2 使用外部程序 expr 算术式 r=`expr 4 + 5` 3 使用 $[] ...

  3. Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数

    1.查看物理CPU的个数 [root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc ...

  4. C++文件读写详解

    http://blog.csdn.net/kingstar158/article/details/6859379/

  5. CentOS防火墙iptables的配置方法详解

    CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助. iptables是与Linux ...

  6. Ural 1057 Amount of Degrees

    Description 问[L,R]中有多少能表示k个b次幂之和. Sol 数位DP. 当2进制时. 建出一个二叉树, \(f[i][j]\) 表示长度为 \(i\) 有 \(j\) 个1的个数. 递 ...

  7. Linux下vim 开发环境配置及配色(Ruby)

    终端设置 字体:Monospace 10 粗体 内置方案M:黑底白字 内置方案S:Linux控制台 安装vundle git clone https://github.com/VundleVim/Vu ...

  8. python——连接MySQL数据库

    都是照着说明文档来的,主要是为了以后忘记了能快一点想起来. 1. 连接 安装MySQL的时候,自动按照了Python的模块,如果没有的话,也可以在官网下载. 看什么都不如看代码来得快: import ...

  9. 修改hosts文件,修改后不生效怎么办

    当你在打开浏览器的情况下修改hosts文件时,关闭浏览器时系统才会释放掉hosts文件占用的那部分内存,我们再次打开浏览器访问就发现已经生效了. ps:ipconfig /flushdns     # ...

  10. Power of Three

    Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...