JAVA实现复制文件夹
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实现复制文件夹的更多相关文章
- java递归复制文件夹
package com.haiyisoft.hyoaService; import java.io.BufferedInputStream;import java.io.BufferedOutputS ...
- 星涛:采用java递归复制文件夹
package com.botao; import java.io.*; /** * @author cbt28 */ public class FileUtil { public static St ...
- java复制文件夹及所有子目录和文件
package text; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...
- Java实现复制文件或者文件夹
拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等. 话不多说直接上代码 import java.io.*; /** * 实现文件的拷贝 */ public cl ...
- java复制文件夹中的所有文件和文件夹到另一个文件夹中
1.复制文件夹 public static void copyDir(String oldPath, String newPath) throws IOException { File file = ...
- java-FileUtils(复制文件夹、复制文件、字符串直接写入文件中)(新手)
实例: lx1: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; pu ...
- CMD复制文件夹
CMD复制文件夹 xcopy /E/I/Y "D:\GitHub\WIP\app" "D:\GitHub\WIP_server\html\webshell"
- Web 在线文件管理器学习笔记与总结(13)重命名文件夹(14)复制文件夹
(13)重命名文件夹 ① 重命名文件夹通过 rename($oldname,$newname) 实现 ② 检测文件夹名是否符合规范 ③ 检测当前目录中是否存在同名文件夹名称,如果不存在则重命名成功 i ...
- c# 封装的文件夹操作类之复制文件夹
c# 封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...
随机推荐
- PHP导出数据到CSV文件函数 csv_export()
后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...
- Alpha总结
一.预期计划 1.时间:11月7日--11月17日 2.小组分工 角色:程序员.美工.文档.测试 这个阶段以编码为主,每个组员参与编码,同时各自根据自己擅长的方面主要负责一个部分. 项目编码工作分工: ...
- C#高级编程笔记 Day 5, 2016年9月 13日 (泛型)
[重点]泛型:有了泛型,就可以创建独立于被包含类型的类和方法了.我们不必给不同的类型编写功能相同的许多方法和类,只创建一个方法或类即可,以下是泛型的特点:性能.类型安全性.二进制代码重用.代码的扩展. ...
- git 教程(13)--创建与合并分支
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...
- python的os模块
1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件和目录名:os.listdir() 3.函数用来删除一个文件:os.remove() ...
- tornadod的异步代码
#!/usr/bin/env python # -*- coding: utf-8 -*- import tornado.httpserver import tornado.ioloop import ...
- Unity3D LuaComponent(基于ulua)
LuaComponent可以支持配一个需要执行在这个gameObject上的lua脚本,并且每个gameObject上的lua都是一个实例 using UnityEngine; using LuaIn ...
- 命令行环境下简单实用的工具——重定向&管道
如果你对管道和重定向应用自如了,无需继续往下看.本文虽然以windows上cmd命令行环境演示,但同样适用于Unix/Linux等平台. 引言 关于管道和重定向,最初是在刘汝佳的<算法竞赛入门经 ...
- jquery返回滚动条顶部
var $view = $('html,body'),$backTop = $('#backTop'), $backTop.on('click',function(){ $view.animate({ ...
- PHP 面向对象
封装与不封装的区别: 未封装 时 外部随意更改数据 数据 不需要判定 就可以执行 外部直接操作数据 封装: 外部同样可以对数据更改,但需要 调用 类里面的 函数 外部间接操作数据 ...