AS3批量替换文件

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

替换前,目标文件夹:

AS3批量替换文件

替换资源文件夹:

AS3批量替换文件

替换后,目标文件夹:

AS3批量替换文件

打印出提示信息:

AS3批量替换文件

实现代码:

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]);
      }
    }

  }
}

上一篇:java模拟登陆功能


下一篇:Codeforces 327E Axis Walking 状压dp