zoukankan      html  css  js  c++  java
  • AS3批量替换文件

      在做项目时,经过会遇到资源替换问题。比如配音公司,提供了一批八九百个配音MP3文件,用到后面却发现有些配音不能正常使用。可能是十几个,也可能是一两百个。只能是配音公司重新提供。因为之前的配音资源,已经生成指定的id,只有把替换资源放在相同的文件夹下,并且同名,才能替换使用。用代码实现成批替换:

    替换前,目标文件夹:

    替换资源文件夹:

    替换后,目标文件夹:

    打印出提示信息:

    实现代码:

    package
    {
      import flash.display.Sprite;
      import flash.filesystem.File;

      public class batchReplacement extends Sprite
      {
        // arr[0]:需要替换文件夹。 arr[1]:替换资源文件夹
        public var arr:Array = ["C:\Users\admin\Desktop\targetFile","C:\Users\admin\Desktop\sourceFile"];

        public var arr1:Array = new Array();
        public var arr2:Array = new Array();
        public var arr3:Array = new Array();

        public function batchReplacement()
        {
          for (var i:int = 0; i<arr.length; i++)
          {
            GetFiles(arr[i]);
          }

          init();
        }

        public function GetFiles(strPath:String):void
        {
          //获取指定路径下的所有文件名
          var directory:File = new File(strPath);
          var contents:Array = directory.getDirectoryListing();
          for (var i:uint = 0; i < contents.length; i++)
          {

            var file:File = contents[i] as File;

            if(file.isDirectory)
            {

              GetFiles(file.nativePath);
            }
            else
            {
              // 遍历目标文件夹里所有文件
              if (file.nativePath.indexOf("targetFile") != -1)
              {
                arr1.push(file.nativePath);
              }
              // 遍历源文件夹里所有文件
              if (file.nativePath.indexOf("sourceFile") != -1)
              {
                arr2.push(file.nativePath);
              }
            }
          }
        }


        public function init():void
        {
          trace("两个文件夹遍历结束! arr1.length:" + arr1.length + ", arr2.length: " + arr2.length);

          for(var i:int = 0; i<arr1.length; i++)
          {
            var str1:String="";
            str1 = arr1[i].substr(arr1[i].indexOf("audio"));

            for (var j:int = 0; j<arr2.length; j++)
            {
              var str2:String="";
              str2 = arr2[j].substr(arr2[j].indexOf("audio"));

              // 对比两个文件夹各自audio目录下的字符串是否相等,相同则替换
              if (str1 == str2)
              {
                var file:File = new File(arr1[i]);
                if(file.exists)
                {
                  //把原文件移除到回收站
                  file.moveToTrash();

                  // 复制新文件
                  var oldDir:File = File.documentsDirectory.resolvePath(arr2[j]);
                  var newDir:File = File.applicationStorageDirectory.resolvePath(arr1[i]);
                  oldDir.copyTo(newDir);

                  // arr3数组记录替换资源
                  arr3.push(arr2[j]);

                  trace("替换文件源文件数组下标:" + j + " : " + newDir.nativePath);
                }
              }
            }
            if (i == arr1.length-1)
            {
              noReplace();
            }
          }
        }

        public function noReplace():void
        {
          // arr2记录源文件和arr3记录替换文件对比,刷选出未被替换文件
          for (var m:int = 0; m<arr2.length; m++)
          {
            for (var n:int = 0; n<arr3.length; n++)
            {
              if (arr2[m] == arr3[n])
              {
                arr2.splice(m,1);
              }
            }
          }


          //打印未替换文件路径
          for (var a:int = 0; a<arr2.length; a++)
          {
            trace("未替换文件路径: " + a + ": "+ arr2[a]);
          }
        }

      }
    }

  • 相关阅读:
    组成原理(九):数值表示
    组成原理(八):DMA方式
    组成原理(七):程序查询及中断方式
    组成原理(六):I/O概述
    组成原理(五):缓存,辅存
    组成原理(四):存储器扩展,汉明码,访存提速
    组成原理(三):存储器概述,RAM,ROM
    组成原理(二):总线
    组成原理(一):入门
    django_python3_pycharm_"font&&size"
  • 原文地址:https://www.cnblogs.com/Hunter-541695/p/7029456.html
Copyright © 2011-2022 走看看