Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          復制文件和目錄

          Posted on 2009-05-24 20:58 啥都寫點 閱讀(290) 評論(0)  編輯  收藏 所屬分類: J2SE
          實例演示:
          package book.io;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;

          public class CopyFileUtil {

              
          /**
               * 復制單個文件, 如果目標文件存在,則不覆蓋。
               * 
          @param srcFileName    待復制的文件名
               * 
          @param destFileName    目標文件名
               * 
          @return        如果復制成功,則返回true,否則返回false
               
          */
              
          public static boolean copyFile(String srcFileName, String destFileName){
                  
          return CopyFileUtil.copyFile(srcFileName, destFileName, false);
              }
              
              
          /**
               * 復制單個文件
               * 
          @param srcFileName    待復制的文件名    
               * 
          @param destFileName    目標文件名
               * 
          @param overlay        如果目標文件存在,是否覆蓋
               * 
          @return    如果復制成功,則返回true,否則返回false
               
          */
              
          public static boolean copyFile(String srcFileName, 
                      String destFileName, 
          boolean overlay) {
                  
          //判斷原文件是否存在
                  File srcFile = new File(srcFileName);
                  
          if (!srcFile.exists()){
                      System.out.println(
          "復制文件失敗:原文件" + srcFileName + "不存在!");
                      
          return false;
                  } 
          else if (!srcFile.isFile()){
                      System.out.println(
          "復制文件失敗:" + srcFileName + "不是一個文件!");
                      
          return false;
                  }
                  
          //判斷目標文件是否存在
                  File destFile = new File(destFileName);
                  
          if (destFile.exists()){
                      
          //如果目標文件存在,而且復制時允許覆蓋。
                      if (overlay){
                          
          //刪除已存在的目標文件,無論目標文件是目錄還是單個文件
                          System.out.println("目標文件已存在,準備刪除它!");
                          
          if(!DeleteFileUtil.delete(destFileName)){
                              System.out.println(
          "復制文件失敗:刪除目標文件" + destFileName + "失敗!");
                              
          return false;
                          }
                      } 
          else {
                          System.out.println(
          "復制文件失敗:目標文件" + destFileName + "已存在!");
                          
          return false;
                      }
                  } 
          else {
                      
          if (!destFile.getParentFile().exists()){
                          
          //如果目標文件所在的目錄不存在,則創建目錄
                          System.out.println("目標文件所在的目錄不存在,準備創建它!");
                          
          if(!destFile.getParentFile().mkdirs()){
                              System.out.println(
          "復制文件失敗:創建目標文件所在的目錄失敗!" );
                              
          return false;
                          }
                      }
                  }
                  
          //準備復制文件
                  int byteread = 0;//讀取的位數
                  InputStream in = null;
                  OutputStream out 
          = null;
                  
          try {
                      
          //打開原文件
                      in = new FileInputStream(srcFile);  
                      
          //打開連接到目標文件的輸出流
                      out = new FileOutputStream(destFile);
                      
          byte[] buffer = new byte[1024];
                      
          //一次讀取1024個字節,當byteread為-1時表示文件已經讀完
                      while ((byteread = in.read(buffer)) != -1) {
                          
          //將讀取的字節寫入輸出流
                          out.write(buffer, 0, byteread);
                      }
                      System.out.println(
          "復制單個文件" + srcFileName + "" + destFileName + "成功!");
                      
          return true;
                  } 
          catch (Exception e) {
                      System.out.println(
          "復制文件失敗:" + e.getMessage());
                      
          return false;
                  } 
          finally {
                      
          //關閉輸入輸出流,注意先關閉輸出流,再關閉輸入流
                      if (out != null){
                          
          try {
                              out.close();
                          } 
          catch (IOException e) {
                              e.printStackTrace();
                          }
                      }
                      
          if (in != null){
                          
          try {
                              in.close();
                          } 
          catch (IOException e) {
                              e.printStackTrace();
                          }
                      }
                  }
              }
              
          /**
               * 復制整個目錄的內容,如果目標目錄存在,則不覆蓋
               * 
          @param srcDirName    待復制的目錄名
               * 
          @param destDirName    目標目錄名
               * 
          @return        如果復制成功返回true,否則返回false
               
          */
              
          public static boolean copyDirectory(String srcDirName, String destDirName){
                  
          return CopyFileUtil.copyDirectory(srcDirName, destDirName, false);
              }
              
          /**
               * 復制整個目錄的內容
               * 
          @param srcDirName    待復制的目錄名
               * 
          @param destDirName    目標目錄名
               * 
          @param overlay        如果目標目錄存在,是否覆蓋
               * 
          @return    如果復制成功返回true,否則返回false
               
          */
              
          public static boolean copyDirectory(String srcDirName, String destDirName,
                      
          boolean overlay) {
                  
          // 判斷原目錄是否存在
                  File srcDir = new File(srcDirName);
                  
          if (!srcDir.exists()) {
                      System.out.println(
          "復制目錄失敗:原目錄" + srcDirName + "不存在!");
                      
          return false;
                  } 
          else if (!srcDir.isDirectory()) {
                      System.out.println(
          "復制目錄失敗:" + srcDirName + "不是一個目錄!");
                      
          return false;
                  }
                  
          // 如果目標文件夾名不以文件分隔符結尾,自動添加文件分隔符
                  if (!destDirName.endsWith(File.separator)) {
                      destDirName 
          = destDirName + File.separator;
                  }
                  File destDir 
          = new File(destDirName);
                  
          // 如果目標文件夾存在,
                  if (destDir.exists()) {
                      
          if (overlay) {
                          
          // 允許覆蓋則刪除已存在的目標目錄
                          System.out.println("目標目錄已存在,準備刪除它!");
                          
          if (!DeleteFileUtil.delete(destDirName)) {
                              System.out.println(
          "復制目錄失敗:刪除目標目錄" + destDirName + "失敗!");
                          }
                      } 
          else {
                          System.out.println(
          "復制目錄失敗:目標目錄" + destDirName + "已存在!");
                          
          return false;
                      }
                  } 
          else {
                      
          // 創建目標目錄
                      System.out.println("目標目錄不存在,準備創建它!");
                      
          if (!destDir.mkdirs()) {
                          System.out.println(
          "復制目錄失敗:創建目標目錄失敗!");
                          
          return false;
                      }
                  }
                  
          boolean flag = true;
                  
          // 列出源文件夾下所有文件(包括子目錄)的文件名
                  File[] files = srcDir.listFiles();
                  
          for (int i = 0; i < files.length; i++) {
                      
          // 如果是一個單個文件,則進行復制
                      if (files[i].isFile()) {
                          flag 
          = CopyFileUtil.copyFile(files[i].getAbsolutePath(), 
                                  destDirName 
          + files[i].getName());
                          
          if (!flag){
                              
          break;
                          }
                      }
                      
          // 如果是子目錄,繼續復制目錄
                      if (files[i].isDirectory()) {
                          flag 
          = CopyFileUtil.copyDirectory(files[i].getAbsolutePath(), 
                                  destDirName 
          + files[i].getName());
                          
          if (!flag){
                              
          break;
                          }
                      }
                  }
                  
          if (!flag){
                      System.out.println(
          "復制目錄" + srcDirName + "" + destDirName+ "失敗!");
                      
          return false;
                  }
                  System.out.println(
          "復制目錄" + srcDirName + "" + destDirName+ "成功!");
                  
          return true;

              }

              
          public static void main(String[] args) {
                  
          //復制單個文件,如果目標存在,則覆蓋
                  String srcPath = "C:/temp/tempfile0.txt";
                  String destPath 
          = "C:/temp_bak/tempfile0_bak.txt";
                  CopyFileUtil.copyFile(srcPath, destPath, 
          true);
                  
          //如果目標存在,則不覆蓋
                  CopyFileUtil.copyFile(srcPath, destPath);
                  System.out.println();
                  
          //復制文件夾,如果目標存在,則覆蓋
                  String srcDir = "C:/temp";
                  String destDir 
          = "D:/temp";
                  CopyFileUtil.copyDirectory(srcDir, destDir, 
          true);
              }
          }
          運行結果:

          復制文件失敗:原文件C:/temp/tempfile0.txt不存在!
          復制文件失敗:原文件C:/temp/tempfile0.txt不存在!

          目標目錄已存在,準備刪除它!
          刪除目錄D:/temp\成功!
          目標目錄不存在,準備創建它!
          目標目錄不存在,準備創建它!
          目標目錄不存在,準備創建它!
          復制單個文件C:\temp\temp0\temp1\temp2\tempFile.txt至D:/temp\temp0\temp1\temp2\tempFile.txt成功!
          復制目錄C:\temp\temp0\temp1\temp2至D:/temp\temp0\temp1\temp2\成功!
          復制單個文件C:\temp\temp0\temp1\temp5895.txt至D:/temp\temp0\temp1\temp5895.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5896.txt至D:/temp\temp0\temp1\temp5896.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5897.txt至D:/temp\temp0\temp1\temp5897.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5898.txt至D:/temp\temp0\temp1\temp5898.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5899.txt至D:/temp\temp0\temp1\temp5899.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5900.txt至D:/temp\temp0\temp1\temp5900.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5901.txt至D:/temp\temp0\temp1\temp5901.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5902.txt至D:/temp\temp0\temp1\temp5902.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5903.txt至D:/temp\temp0\temp1\temp5903.txt成功!
          復制單個文件C:\temp\temp0\temp1\temp5904.txt至D:/temp\temp0\temp1\temp5904.txt成功!
          復制目錄C:\temp\temp0\temp1至D:/temp\temp0\temp1\成功!
          復制目錄C:\temp\temp0至D:/temp\temp0\成功!
          復制目錄C:/temp至D:/temp\成功!



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 田东县| 舒兰市| 克拉玛依市| 濮阳市| 庆云县| 赫章县| 桂林市| 塘沽区| 漠河县| 宝坻区| 闵行区| 房产| 仁寿县| 松溪县| 景宁| 临沧市| 呼玛县| 察雅县| 洪泽县| 孟津县| 尉犁县| 长汀县| 确山县| 萨嘎县| 马公市| 东乌珠穆沁旗| 高台县| 乌恰县| 昌都县| 苍梧县| 虹口区| 花莲市| 扎兰屯市| 抚州市| 巴里| 万全县| 尼勒克县| 榕江县| 乌拉特后旗| 绥滨县| 孟村|