Java 实现复制文件夹,并加入百分比进度
文件夹复制核心方法:
private void copy(File root,File tar){
File[] files = root.listFiles();
for(File f : files){
String fname = f.getName();
File target = new File(tar,fname);
if(f.isFile()){
copyFile(f,target);
}else{
target.mkdir();
copy(f,target);
}
}
}
复制文件数据:
FileOutputStream fos = null;
FileInputStream fis = null;
System.out.print("Copying..."+f.getName()+"--");
fis = new FileInputStream(f);
fos = new FileOutputStream(t);
int len = 0;
byte[] buf = new byte[1024];
String rate = "";
while((len=fis.read(buf))!=-1){
fos.write(buf,0,len);
for (int i=0;i<rate.length();i++){
System.out.print("\b");
}
rate = (float)Math.round((t.length()*1.0/f.length())*1000)/10+"%";
System.out.print(rate);
}
System.out.print("\b\b\b\b\b\b\b\b");
System.out.println("--finish.\n");
完整代码
package com.csdn;
import java.util.Scanner;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test{
public static void main(String args[]){
String path = "D:/temp";
String tar = "D:/temp2";
Test t = new Test();
t.copy(path,tar);
}
public void copy(String str,String str2){
File root = new File(str);
File tar = new File(str2);
if(root.isDirectory()&&tar.isDirectory()){
String rname = root.getName();
tar = new File(tar,rname);
tar.mkdir();
copy(root,tar);
}else{
System.out.println("Error...");
}
}
private void copy(File root,File tar){
File[] files = root.listFiles();
for(File f : files){
String fname = f.getName();
File target = new File(tar,fname);
if(f.isFile()){
copyFile(f,target);
}else{
target.mkdir();
copy(f,target);
}
}
}
private void copyFile(File f ,File t){
FileOutputStream fos = null;
FileInputStream fis = null;
try{
System.out.print("Copying..."+f.getName()+"--");
fis = new FileInputStream(f);
fos = new FileOutputStream(t);
int len = 0;
byte[] buf = new byte[1024];
String rate = "";
while((len=fis.read(buf))!=-1){
fos.write(buf,0,len);
for (int i=0;i<rate.length();i++){
System.out.print("\b");
}
rate = (float)Math.round((t.length()*1.0/f.length())*1000)/10+"%";
System.out.print(rate);
}
System.out.print("\b\b\b\b\b\b\b\b");
System.out.println("--finish.\n");
}catch(IOException e){
e.printStackTrace();
}finally{
if(fis!=null){
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
if(fos!=null){
try{
fos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}