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. poj 1239

    二次dp,还算好想. 先第一遍dp找出最后一个数字最小是几. dpf[i]=max{j}+1(dpf[j],dpf[j]+1,…,j位组成的数字小于j+1,j+2,…,i位组成的数字. 在第二遍dp, ...

  2. div内填内容

    <div contenteditable="true">可以编辑里面的内容</div> 这样就可以使div想textarea一样 可以加入自动换行与over ...

  3. python function parameter

    Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...

  4. tomcat相关问题

    动态资源:需要转换成静态资源后再响应给客户端,例如:jsp.servlet,其他语言的动态资源有:asp.php 静态资源:无需转发即可直接响应给客户端,例如:html.css.javascript ...

  5. .NET LINQ 生成操作

    生成操作      生成是指创建新的值序列. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 DefaultIfEmpty 将空集合替换为具有默认值的单一 ...

  6. How to Install The Alpha Control Packages.

    Uninstalling previous version of the package If you have a previous version of the package already i ...

  7. 使用eclipse+fiddler+微信web开发者工具调试本地微信页面

    前面已经说了调试服务器上的微信页面,放链接:http://www.cnblogs.com/Gabriel-Wei/p/5977850.html 还有fiddler调试链接:http://www.cnb ...

  8. Memcache之telnet操作

    在telnet Memcache之前,先要确认 memcached已启用. 如:ps -ef |grep memcache netstat -elp |grep memcache 或者 netstat ...

  9. WebView基本使用

    WebView mWebView; ProgressBar mProgressBar; mProgressBar = (ProgressBar) findViewById(R.id.news_prog ...

  10. 【基础知识】UML基础

    http://www.ibm.com/developerworks/cn/rational/r-uml/