Cyh的博客

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

          移動文件和目錄

          Posted on 2009-05-24 20:54 啥都寫點 閱讀(265) 評論(0)  編輯  收藏 所屬分類: J2SE
          關(guān)鍵技術(shù):
          • File的renameTo方法能移動文件。
          • 當目標文件存在,或者目標文件的父目錄不存在時,renameTo方法返回false.


          package book.io;
          import java.io.File;
          /**
           * 移動文件或目錄
           
          */
          public class MoveFileUtil {

              
          /**
               * 移動單個文件,不覆蓋已存在的目標文件
               * 
          @param srcFileName    待移動的原文件名    
               * 
          @param destFileName    目標文件名
               * 
          @return        文件移動成功返回true,否則返回false
               
          */
              
          public static boolean moveFile(String srcFileName, String destFileName){
                  
          //默認為不覆蓋目標文件
                  return MoveFileUtil.moveFile(srcFileName, destFileName, false);
              }
              
          /**
               * 移動單個文件
               * 
          @param srcFileName    待移動的原文件名
               * 
          @param destFileName    目標文件名
               * 
          @param overlay        如果目標文件存在,是否覆蓋
               * 
          @return    文件移動成功返回true,否則返回false
               
          */
              
          public static boolean moveFile(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()){
                          
          //如果目標文件所在的目錄不存在,則創(chuàng)建目錄
                          System.out.println("目標文件所在目錄不存在,準備創(chuàng)建它!");
                          
          if(!destFile.getParentFile().mkdirs()){
                              System.out.println(
          "移動文件失敗:創(chuàng)建目標文件所在的目錄失敗!" );
                              
          return false;
                          }
                      }
                  }
                  
          //移動原文件至目標文件
                  if (srcFile.renameTo(destFile)){
                      System.out.println(
          "移動單個文件" + srcFileName + "" + destFileName + "成功!");
                      
          return true;
                  } 
          else {
                      System.out.println(
          "移動單個文件" + srcFileName + "" + destFileName  + "失敗!");
                      
          return true;
                  }
              }
              
              
          /**
               * 移動目錄,不覆蓋已存在的目標目錄
               * 
          @param srcDirName    待移動的原目錄名
               * 
          @param destDirName    目標目錄名
               * 
          @return        目錄移動成功返回true,否則返回false
               
          */
              
          public static boolean moveDirectory(String srcDirName, String destDirName){
                  
          //默認為不覆蓋目標文件
                  return MoveFileUtil.moveDirectory(srcDirName, destDirName, false);
              }
              
              
          /**
               * 移動目錄。
               * 
          @param srcDirName    待移動的原目錄名
               * 
          @param destDirName    目標目錄名
               * 
          @param overlay        如果目標目論存在,是否覆蓋
               * 
          @return        目錄移動成功返回true,否則返回false
               
          */
              
          public static boolean moveDirectory(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;
                  }
                  
          // 如果目標文件夾名不以文件分隔符結(jié)尾,自動添加文件分隔符
                  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 {
                      
          //創(chuàng)建目標目錄
                      System.out.println("目標目錄不存在,準備創(chuàng)建它!");
                      
          if(!destDir.mkdirs()){
                          System.out.println(
          "移動目錄失敗:創(chuàng)建目標目錄失敗!" );
                          
          return false;
                      }
                  }
                  
          boolean flag = true;
                  
          //移動原目錄下的文件和子目錄到目標目錄下
                  File[] files = srcDir.listFiles();
                  
          for (int i = 0; i < files.length; i++) {
                      
          //移動子文件
                      if (files[i].isFile()){
                          flag 
          = MoveFileUtil.moveFile(files[i].getAbsolutePath(), 
                                  destDirName 
          + files[i].getName(), overlay);
                          
          if (!flag){
                              
          break;
                          }
                      }
                      
          //移動子目錄
                      else if (files[i].isDirectory()){
                          flag 
          = MoveFileUtil.moveDirectory(files[i].getAbsolutePath(), 
                                  destDirName 
          + files[i].getName(), overlay);
                          
          if (!flag){
                              
          break;
                          }
                      }
                  }
                  
          if (!flag){
                      System.out.println(
          "移動目錄" + srcDirName + "" + destDirName+ "失敗!");
                      
          return false;
                  }
                  
          // 刪除原目錄
                  if (DeleteFileUtil.deleteDirectory(srcDirName)){
                      System.out.println(
          "移動目錄" + srcDirName + "" + destDirName+ "成功!");
                      
          return true;
                  } 
          else {
                      System.out.println(
          "移動目錄" + srcDirName + "" + destDirName+ "失敗!");
                      
          return false;
                  }
              }
              
              
          public static void main(String[] args) {
                  
          //移動單個文件,如果目標文件存在,則替換
                  String srcFileName = "C:/temp/temp.txt";
                  String destFileName 
          = "C:/tempbak/temp_bak.txt.";
                  MoveFileUtil.moveFile(srcFileName, destFileName, 
          true);
                  System.out.println();
                  
          //移動目錄,如果目標目錄存在,則不覆蓋
                  String srcDirName = "C:/temp";
                  String destDirName 
          = "C:/tempbak";
                  MoveFileUtil.moveDirectory(srcDirName, destDirName);
              }
          }



                                                                                                                 --    學(xué)海無涯
                  

          主站蜘蛛池模板: 馆陶县| 永靖县| 循化| 绵竹市| 黄平县| 蕲春县| 顺义区| 铜梁县| 南京市| 永福县| 甘谷县| 杂多县| 宁陵县| 安多县| 五寨县| 东丰县| 白玉县| 和田县| 湾仔区| 安义县| 土默特左旗| 赞皇县| 宁河县| 天水市| 阿克陶县| 庄浪县| 德庆县| 雷州市| 衢州市| 西贡区| 博白县| 东宁县| 察雅县| 石狮市| 高尔夫| 即墨市| 开平市| 家居| 朝阳市| 建水县| 秀山|