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比缓冲复制效率高三分之一。仅供大家参考。

最新文章

  1. class中new与未new的区别 类对象占用空间--转载
  2. oracle number型日期转date型日期
  3. Java--&gt;Tomcat(免费的Java Web服务器)
  4. 进入git diff 界面,无法继续输入命令
  5. (转)mongodb分片
  6. [ActionScript 3.0] AS3 拖拽混动效果之一
  7. Linux下去掉^M的方法
  8. DTD - XML Building Blocks
  9. arcgis api for silverlight
  10. js检测对象中是否存在某个属性
  11. 2、为Eclipse绑定Tomcat
  12. MyBatis学习-SQL 符号篇
  13. centos 修改主机映射
  14. Aliase_小白学Python_Day0_前言
  15. 一个经典的 HTTP协议详解
  16. tomcat 常用命令 网上找的资料
  17. 利用开机账户登录“轻松访问”创建Windows后门
  18. 51nod1331 狭窄的通道
  19. JSON C# Class Generator ---由json字符串生成C#实体类的工具
  20. JDK居然还有Server和Client模式

热门文章

  1. json死循环问题
  2. Redirect url 路径简单介绍
  3. appCan uexLocation 定位功能
  4. ios如何一个证书多台设备测试
  5. Swift - 生成随机颜色(Extension UIColor)
  6. Loadrunner监控Linux系统资源
  7. JS回调函数全解析教程
  8. 网络知识学习2---(IP地址、子网掩码)(学习还不深入,待完善)
  9. Git版本控制管理学习笔记2--起步
  10. Android Studio 之 no render target selected