Java语言实现目录的拷贝
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
/**
* CopyFileFolder.java
*
* 编写一个程序可以拷贝文件夹
* 1、输入要拷贝的文件夹路径
* 2、输入要新建的文件夹的路径
* 3、用File对象获得原文件夹下所有文件
* 4、使用FileInputStream、FileOutputStream来实现将原文件夹下的文件内容拷贝到新文件夹下
*
* Nov 6, 2012 9:31:11 PM
*
*/
public class CopyFileFolder2 {
static int count = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你要拷贝文件夹的源路径:");
String orignPath = input.next();
boolean flag = true;
//逻辑处理判断,你输入的路径是否存在,也即目录是否存在,不存在则重新输入
while(flag){
if(!(new File(orignPath)).exists()){
flag = true;
System.out.print("文件夹的路径不存在,请重新输入源路径名:");
orignPath = input.next();
}else{
flag = false;
}
}
System.out.print("请输入你要拷贝文件夹的目的路径:");
String desPath = input.next();
long start = System.currentTimeMillis();
CopyFileFolder2.copyFileFolder(orignPath, desPath);
long end = System.currentTimeMillis();
System.out.println("你要拷贝的文件夹下面的目录以及子目录中的目录共有:"+count+"个");
System.out.println("本次拷贝过程总共花费了:"+(end-start)+"毫秒!");
}
public static void copyFileFolder(String orignPath,String desPath){
new File(desPath).mkdirs();//创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
File file = new File(orignPath);
//拿到源路径的文件列表
String[] strs = file.list();
File temp = null;
for (int i = 0; i < strs.length; i++) {
if(orignPath.endsWith(File.separator)){
temp = new File(orignPath+strs[i]);
}else{
temp=new File(orignPath+File.separator+strs[i]);
}
if(temp.isFile()){//如果是文件,就执行拷贝动作,否则就先建立相应的文件夹之后在进行相应的动作
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//拿到一个输入流,去读源文件中的内容
fis = new FileInputStream(temp);
//拿到一个输出流,将内容写进新文件中
fos = new FileOutputStream(desPath+"\\"+temp.getName().toString());//注意"\"也可以
//临时存储空间,可以稍微定义的大一点,这就可以增加读写速度了,(另外说明,XP系统中的缓存是4kb)
byte[] tempSpace = new byte[1024];
int len = 0;
while((len=fis.read(tempSpace)) != -1){
fis.read(tempSpace, 0, len);//每次读入tesmSpace大小的空间
fos.write(tempSpace);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fos != null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fis != null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}else{
count++;
copyFileFolder(orignPath+"\\"+strs[i],desPath+"\\"+strs[i]);
}
}
}
}