博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复制一个文件夹中的所有文件和文件夹的java程序实现
阅读量:5316 次
发布时间:2019-06-14

本文共 3417 字,大约阅读时间需要 11 分钟。

使用java程序实现了对文件夹的复制功能:

 package demo.io;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Date;

public class TestIo {

 public static float length = 0; 
 s public  void isFile(File f ,String dir) throws IOException{ //使用递归的方法遍历该目录下的所有文件和文件夹
  File[] farry = f.listFiles(); //得到该文件夹下的所有目录和文件
  for(int i=0;i<farry.length;i++){
   String fileName = farry[i].getName();
   String filePath = farry[i].getPath();
   String path = changPath(filePath);   //将路径中的\替换为/
   String newPath = newPath(path, dir);   //建立目标文件路径
   if(farry[i].isDirectory()){  //判断是否是目录文件
    boolean b = createFile(newPath);  //创建与该文件夹同名的目标文件中的文件夹 创建成功返回true失败返回false
    System.out.println(fileName);
       System.out.println(filePath);
       System.out.println(newPath);
       System.out.println(b);
    System.out.println("目录名:"+farry[i].getName() +" : 路径: "+farry[i].getPath());  //打印该目录的名称和路径
    isFile(farry[i],dir);        //递归调用该方法
   }else{  //如果不是目录文件复制该文件到指定的路径上
    copyFile(path, newPath); //将该文件复制到目标文件夹中
    totalLength(farry[i].length()/1024);
    System.out.println("文件名:"+farry[i].getName()+" :路径: "+farry[i].getPath()+" : 文件大小:"+farry[i].length()/1024+"KB");
   }
   
   
  }
  
 }
 
 public String changPath(String path){  //修改路径
  path = path.replace("\\","/");
  return path;
 }
 public String newPath(String path,String dir){  //创建新的目录地址
  String newPath = path.substring(path.indexOf(":")+1);
  newPath = dir+newPath;
  return newPath;
 }
 public boolean createFile(String path) throws IOException{   //创建文件夹
  File f = new File(path);
  boolean flag = false;
  // f.createNewFile();
  flag =  f.mkdir();
  if(f.isDirectory()){
   flag = true;
  }
  return flag;
 }
 public void copyFile(String inPath,String outPath){ //复制文件夹中的文件到目标文件夹
  try {
   BufferedReader br = new BufferedReader(new FileReader(inPath));
   BufferedWriter bw = new BufferedWriter(new FileWriter(outPath));
   String len = br.readLine();
   while (len != null) {
    bw.write(len);
    len = br.readLine();
   }
   br.close();  //关闭输入流
   bw.close();  //关闭输出流
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public void firstCopy(File f, String dir){  //在复制之前建立目标文件夹中的根目录 如果该文件不是文件夹则直接复制该文件
  String path = f.getPath();
  path = changPath(path);
  String newPath = newPath(path, dir);
  if(f.isDirectory()){
   try {
    boolean flag = createFile(newPath);
    isFile(f,dir); //遍历该文件夹
   } catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println("路径不正确");
    e.printStackTrace();
   }
  }else{ //不是文件夹则直接复制该文件
   copyFile(path, newPath);
  }
  
 }
 public float totalLength(float f){ //计算该文件夹中所有文件的总长度
  length = length+f;
  return length;
 };
 public static void main(String[] args) throws IOException {
 
  TestIo t = new TestIo();
  Date date = new Date();
  long start = 0;
  long end = 0;
  start = date.getTime();
     File f = new File("F:/11");  //需要拷贝的文件或文件夹路径
     t.firstCopy(f, "E:/22");         //目标路径
     Date d2 = new Date();
     end = d2.getTime();
     System.err.println("总用时为:"+(end-start));
     System.err.println("复制文件的总大小为:"+length/1024+" MB");
    // t.doCopy2();
 }

}

遍历是使用递归实现

注释写的挺详细的,相信大家直接看注释也看以看的差不多,如果有什么疑问可以随时提出,方便大家一起交流。

转载于:https://www.cnblogs.com/vTree/archive/2011/08/12/2136157.html

你可能感兴趣的文章
JavaScript介绍
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
pandas 修改指定列中所有内容
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>