目錄拷貝程序(無限級拷貝)

来源:互联网 发布:狄拉克方程 知乎 编辑:程序博客网 时间:2024/06/15 02:44

FileCopy.java:

import java.io.*;
public class FileCopy
{
  FileInputStream FIS;
  FileOutputStream FOS;
  public boolean copyFile(String src, String des)
  {
    try
    {
      //取得輸入出流
      FIS = new FileInputStream(src);
      FOS = new FileOutputStream(des);
      byte[] bt = new byte[1024];
      int readNum = 0;
      while ((readNum = FIS.read(bt)) != -1)
      {
        FOS.write(bt, 0, bt.length);
      }
      FIS.close();
      FOS.close();
      return true;
    }
    catch (Exception e)
    {
      try
      {
        FIS.close();
        FOS.close();
      }
      catch (IOException f)
      {
        // TODO
      }
      return false;
    }
    finally
    {
    }
  }
}

DirectoryCopy.java:

/*
 * 文件拷貝函數,可以拷一個指定文件夾下面的所有文件,及其子目錄中的文件
 * 以及子目錄中子目錄下面的內容
 */

import java.io.*;

public class DirectoryCopy
{
  FileInputStream FIS;
  FileOutputStream FOS;

  public DirectoryCopy()
  {
  }
  //文件夾拷貝核心函數

  public boolean copyDirectory(String SrcDirectoryPath,
                               String DesDirectoryPath)
  {

    try
    {
      //創建不存在的目錄
      File F0 = new File(DesDirectoryPath);
      if (!F0.exists())
      {
        if (!F0.mkdir())
        {
          System.out.println("目標文件夾不存,創建失敗!");
        }
      }
      File F = new File(SrcDirectoryPath);
      File[] allFile = F.listFiles(); //取得當前目錄下面的所有文件,將其放在文件數組中
      int totalNum = allFile.length; //取得當前文件夾中有多少文件(包括文件夾)
      String srcName = "";
      String desName = "";
      int currentFile = 0;
      //一個一個的拷貝文件
      for (currentFile = 0; currentFile < totalNum; currentFile++)
      {
        if (!allFile[currentFile].isDirectory())
        {
          //如果是文件是采用處理文件的方式
          srcName = allFile[currentFile].toString();
          desName =
              DesDirectoryPath + "//" + allFile[currentFile].getName();
          FileCopy FC = new FileCopy();
          FC.copyFile(srcName, desName);
        }
        //如果是文件夾就采用遞歸處理
        else
        {
          //利用遞歸讀取文件夾中的子文件下的內容,再讀子文件夾下面的子文件夾下面的內容...
          if (copyDirectory(allFile[currentFile].getPath().toString(),
                            DesDirectoryPath + "//" +
                            allFile[currentFile].getName().toString()))
          {
            //System.out.println("D Copy Successfully!");
          }
          else
          {
            System.out.println("SubDirectory Copy Error!");
          }
        }
      }
      return true;
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return false;
    }
  }

  public static void main(String[] args)
  {
    DirectoryCopy directoryCopy = new DirectoryCopy();
    /*
    if (args.length != 2)
      System.exit(0);
    File F = new File(args[0]);
    if (F.exists())
    {
      if (!F.isDirectory())
      {
        System.out.println("請輸入一個目錄的全路徑!");
        System.exit(0);
      }
    }
    else
    {
      System.out.println("你輸入的路徑不存在!");
    }
   */
    //if (directoryCopy.copyDirectory(args[0], args[1]))
    if (directoryCopy.copyDirectory("e://123", "e://456"))
    {
      System.out.println("Directory Copy Successfully!");
    }
    else
    {
      System.out.println("Directory Copy error!");
    }
  }
}

原创粉丝点击