Cyh的博客

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

          移動文件和目錄

          Posted on 2009-05-24 20:54 啥都寫點 閱讀(265) 評論(0)  編輯  收藏 所屬分類: J2SE
          關鍵技術:
          • 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(
          "移動文件失?。涸募?/span>" + srcFileName + "不存在!");
                      
          return false;
                  } 
          else if (!srcFile.isFile()){
                      System.out.println(
          "移動文件失?。?/span>" + srcFileName + "不是一個文件!");
                      
          return false;
                  }
                  File destFile 
          = new File(destFileName);
                  
          //如果目標文件存在
                  if (destFile.exists()){
                      
          //如果允許文件覆蓋
                      if (overlay){
                          
          //刪除已存在的目標文件,無論目標文件是目錄還是單個文件
                          System.out.println("目標文件已存在,準備刪除它!");
                          
          if(!DeleteFileUtil.delete(destFileName)){
                              System.out.println(
          "移動文件失?。簞h除目標文件" + destFileName + "失?。?/span>");
                              
          return false;
                          }
                      } 
          else {
                          System.out.println(
          "移動文件失?。耗繕宋募?/span>" + destFileName + "已存在!");
                          
          return false;
                      }
                  } 
          else {
                      
          if (!destFile.getParentFile().exists()){
                          
          //如果目標文件所在的目錄不存在,則創建目錄
                          System.out.println("目標文件所在目錄不存在,準備創建它!");
                          
          if(!destFile.getParentFile().mkdirs()){
                              System.out.println(
          "移動文件失?。簞摻繕宋募诘哪夸浭。?/span>" );
                              
          return false;
                          }
                      }
                  }
                  
          //移動原文件至目標文件
                  if (srcFile.renameTo(destFile)){
                      System.out.println(
          "移動單個文件" + srcFileName + "" + destFileName + "成功!");
                      
          return true;
                  } 
          else {
                      System.out.println(
          "移動單個文件" + srcFileName + "" + destFileName  + "失?。?/span>");
                      
          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(
          "移動目錄失?。涸夸?/span>" + srcDirName + "不存在!");
                      
          return false;
                  } 
          else if (!srcDir.isDirectory()){
                      System.out.println(
          "移動目錄失?。?/span>" + 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 
          = 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+ "失?。?/span>");
                      
          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);
              }
          }



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 东山县| 宣汉县| 舞钢市| 长沙县| 星子县| 清丰县| 买车| 通榆县| 东台市| 黎平县| 沈阳市| 扎囊县| 玉田县| 建宁县| 静乐县| 长葛市| 璧山县| 澎湖县| 阿城市| 兴和县| 巨鹿县| 嘉义市| 石台县| 化德县| 肃南| 枞阳县| 寿阳县| 北辰区| 大厂| 县级市| 云梦县| 泌阳县| 河东区| 新疆| 丽江市| 台安县| 湛江市| 乌鲁木齐县| 陕西省| 遂川县| 平南县|