首页 > 技术文章 > 复制文件并显示百分比

qfdy123 2019-06-22 21:13 原文

package LESSON12;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
public class demo5 {
    public static void main(String[] args) throws Exception{
        //复制文件并显示进度:0%..1%....100%    
        File filefrom=new File("D:/弹性表达式.doc ");//待拷贝文件
        File fileto=new File("E:文档/弹性表达式.doc  ");//拷贝之后的文件
        File parentFile =fileto.getParentFile();//以File类型返回父类
        if(!parentFile.exists()){//如果父类文件对象不存在
            parentFile.mkdirs();//创建多个文件夹
        }
        fileto.createNewFile();//创建文件    
        FileInputStream fis=new FileInputStream(filefrom);
        FileOutputStream fos=new FileOutputStream(fileto);
//        int i=fis.read();//单个字符读取,速度慢
//        while(i!=-1){
//            fos.write(i);
//            i=fis.read();
//        }
        
        byte b[]=new byte[1024];
        int i=fis.read(b);
       //法1
//        int j=1;
//        while(i!=-1){
//            fos.write(b);
//            i=fis.read(b);
//            double flen=filefrom.length();
//            double bai=(b.length*j)/flen;
//            String num=new DecimalFormat("00%").format(bai);
//            System.out.println(num);
//            j++;
//        }
        
        
        //法二
        int length=b.length;//每次读取的长度
        long fileLength=filefrom.length();//总长度
        double sum=0;//声明一个变量接受叠加读取的长度
        while(i!=-1){
            fos.write(b);
            i=fis.read(b);
             sum+=length;//
            double percent=sum/fileLength;
            if(percent>=1){//预防结果出现超过100%的现象
                percent=1;
            }
            String num=new DecimalFormat("00%").format(percent);
            System.out.println("已复制:"+num);//每次读取总长度
            if(num.equals("100%")){
                System.out.print("复制完成");
            }
            
        }      
        //关流:先开的后关
        //先关过滤流,再关节点流,先关输出流,再管输入流
        fos.close();
        fis.close();
    }
}

运行结果

推荐阅读