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> /// 文件夹操作类 /// ...
随机推荐
- h5 hdf5 文件转 tif 流程
由于需要对h5(hdf5)格式的dem数据进行拼接,但是arcgis不能识别h5的地理参考信息,所以先将h5文件转为带地理参考的tif文件,然后再进行拼接. 工具:arcgis+envi 1.用arc ...
- JS学习:第一周——NO.1预解释
1.何为预解释? 在当前作用域下,在JS代码执行之前,浏览器会对带var和带function的进行提前声明或定义: ①带var的:只声明不定义:告诉浏览器,有这么一个变量,但是并没有赋值 ②带func ...
- (转)android自定义组合控件
原文地址:http://mypyg.iteye.com/blog/968646 目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性. 1.控件布局:以Linea ...
- 难道这就是JavaScript中的"闭包"
其实对于JavaScript中的"闭包"还没真正理解,这次在实际Coding中似乎遇到了"闭包"的问题,仅此摘录,以待深究. 表现为jQuery的post方法回 ...
- 数据库分库分表(sharding)系列(一) 拆分规则
第一部分:实施策略 数据库分库分表(sharding)实施策略图解 1. 垂直切分垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表.结合已经准备好的数据库ER图或领域模型 ...
- SQL创建字段信息(表值函数)
ALTER FUNCTION [dbo].[fnt_SplitString] ( @p1 varchar(Max), ) ) RETURNS @Table_Var TABLE ( c1 varchar ...
- aes加密C语言
/** * \file aes.h * * \brief AES block cipher * * Copyright (C) 2006-2010, Brainspark B.V. * * This ...
- JMeter遇到的问题一:Error writing to server(转)
Java.io.IOException: Error writing to server异常:我测试500个并发时,系统没有问题:可当我把线程数加到800时,就出现错误了,在"查看结果树&q ...
- mysql 外键 级联
主表 -- 创建用户信息表 create table userinfo ( userid int primary key not null auto_increment COMMENT '主键', u ...
- NSURLSession总结
NSURLSession(会话)(ios7新增加) //英译 Session:会议,讲话 configuration:结构,配置 expect:预期 resume:取得 suspend:推迟 pro ...