参考自:http://blog.youkuaiyun.com/Dream_JavaWorld/article/details/3682075
拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。
但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。
- packageorg.bruce.convert.util;
- importjava.io.*;
- /**
- *复制文件夹或文件夹
- */
- publicclassCopyUtil{
- publicstaticboolean_choice=true;
- //复制文件
- publicstaticvoidCopyFile(FilesourceFile,FiletargetFile)
- throwsIOException{
- //新建文件输入流并对它进行缓冲
- FileInputStreaminput=newFileInputStream(sourceFile);
- BufferedInputStreaminBuff=newBufferedInputStream(input);
- //新建文件输出流并对它进行缓冲
- FileOutputStreamoutput=newFileOutputStream(targetFile);
- BufferedOutputStreamoutBuff=newBufferedOutputStream(output);
- //缓冲数组
- byte[]b=newbyte[1024*5];
- intlen;
- while((len=inBuff.read(b))!=-1){
- outBuff.write(b,0,len);
- }
- //刷新此缓冲的输出流
- outBuff.flush();
- //关闭流
- inBuff.close();
- outBuff.close();
- output.close();
- input.close();
- }
- //复制文件夹
- publicstaticvoidCopyDirectory(StringsourceDir,StringtargetDir)
- throwsIOException{
- //新建目标目录
- (newFile(targetDir)).mkdirs();
- //获取源文件夹当前下的文件或目录
- File[]file=(newFile(sourceDir)).listFiles();
- for(inti=0;i<file.length;i++){
- if(file[i].isFile()){
- //源文件
- FilesourceFile=file[i];
- //目标文件
- FiletargetFile=newFile(
- newFile(targetDir).getAbsolutePath()+File.separator
- +file[i].getName());
- CopyFile(sourceFile,targetFile);
- }
- if(file[i].isDirectory()){
- //准备复制的源文件夹
- Stringdir1=sourceDir+File.separator+file[i].getName();
- //准备复制的目标文件夹
- Stringdir2=targetDir+File.separator+file[i].getName();
- CopyDirectory(dir1,dir2);
- }
- }
- }
- /**
- *稍作包装,
- *如果url1是文件的话,直接copyFile
- *如果url1是文件夹的话,再copyDirectory
- *@throwsIOException
- */
- publicstaticbooleanPowerCopy(Stringsource,Stringdest){
- try{
- Fileinput=newFile(source);
- if(input.isFile()&&!_choice){
- //如果输入是一个文件~
- (newFile(dest)).mkdirs();
- Fileoutput=newFile(dest+File.separator+input.getName());
- CopyFile(input,output);
- }elseif(input.isFile()&&_choice){
- CopyFile(newFile(source),newFile(dest));
- }else{
- //如果输入是一个文件夹~
- CopyDirectory(source,dest);
- }
- returntrue;
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- BY.Err("exceptionoccuredinCopyUtil.powerCopy!");
- returnfalse;
- }
- }
- /**
- *usage!!
- */
- publicstaticvoidmain(Stringargs[])throwsIOException{
- //单文件~
- Stringurl1="/Users/user/Desktop/480*320.png";
- Stringurl2="/Users/user/Desktop/481*320.png";
- //源文件夹->目标文件夹
- //Stringurl1="/Users/user/Desktop/Resources";
- //Stringurl2="/Users/user/Desktop/Resources2";
- PowerCopy(url1,url2);
- }
- }