复制文件并显示百分比
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(); } }
运行结果