黑马程序员技术交流社区
标题:
(分享给初学者,大神勿喷)复制文件夹下所有文件以及子目...
[打印本页]
作者:
boycechan
时间:
2015-1-10 22:08
标题:
(分享给初学者,大神勿喷)复制文件夹下所有文件以及子目...
import java.io.File;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
//自己用EditPlus写的,绝非copy
class CopyAllFiles
{
public static void main(String[] args)
{
//源目录
File srcFolder=new File("D:\\KwDownload");
//目的地目录
File destFloder=new File("E:\\music");
long startTime=System.currentTimeMillis();
//将源目录下的所有文件及文件夹复制到指定目录
boolean flag=copyAllFiles(srcFolder,destFloder);
long endTime=System.currentTimeMillis();
long resultTime=endTime-startTime;
if(flag)
{
System.out.println("复制成功!共用时"+resultTime+"毫秒("+(resultTime/1000)+"秒)");
}
}
/**
* 文件及文件夹复制工具
* @param src 源目录
* @param dest 目的地目录
* @return flag 返回true表示复制成功,否则复制失败
*/
public static boolean copyAllFiles(File src,File dest)
{
boolean flag=false;
if(!dest.exists())
{
dest.mkdir();
}
File[] fileArr=src.listFiles(); //将源目录下的对象封装进File数组
for(File f:fileArr) //遍历File中的对象
{
if(f.isDirectory()) //判断File对象是否是目录
{
File newFolder=new File(dest,f.getName());
newFolder.mkdir(); //创建目的地目录创建遍历到的文件夹
copyAllFiles(f,newFolder); //如果遍历到的是目录,递归循环操作
//System.out.println(f.getName()+"---"+newFolder.getName());
}
else
{
//调用字节流复制方法
//CopyBinaryFile(f.getAbsolutePath(),dest.getAbsolutePath().concat("\\").concat(f.getName()));
CopyBinaryFile(f.getAbsolutePath(),new File(dest,f.getName()).getAbsolutePath());
//System.out.println(f.getAbsolutePath());
//System.out.println(new File(dest,f.getName()).getAbsolutePath());
}
if(f!=null)
{
flag=true;
}
}
return flag;
}
/**
* 字节流文件复制工具
* @param src 数据源
* @param dest 目的地
* @return flag 如果为true,表示复制成功,否则,复制失败。
*/
public static boolean CopyBinaryFile(String src,String dest)
{
boolean flag=false;
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try
{
bis=new BufferedInputStream(new FileInputStream(src));
bos=new BufferedOutputStream(new FileOutputStream(dest));
byte[] bys=new byte[1024];
int len=0;
while((len=bis.read(bys))!=-1)
{
//写入数据
bos.write(bys,0,len);
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
finally
{
if(bos!=null)
{
try
{
//释放资源
bos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
if(bis!=null)
{
try
{
//释放资源
bis.close();
flag=true;
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
return flag;
}
}
复制代码
作者:
wangcongwu
时间:
2015-1-10 23:17
你这个不是面向对象了,是面向过程了
作者:
boycechan
时间:
2015-1-11 00:00
wangcongwu 发表于 2015-1-10 23:17
你这个不是面向对象了,是面向过程了
分享个思路而已,难道我还抽取几个类出来?发文件上传?有必要么?就算是面向对象这也只算是个工具类,也是用静态方法,用类名,方法名调用。
作者:
随影
时间:
2015-1-11 21:25
谢谢分享
作者:
荭蕾
时间:
2015-1-12 21:43
看着很实用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2