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

      }
    }

  • 相关阅读:
    ServletContentLIstener接口演示ServletContext的启动和初始化
    Filter过滤非法字符
    显示Servlet API主要版本,次要版本以及服务器系统信息
    示例:Servlet显示当前系统时间(时间格式化)
    Servlet编写登录界面
    示例:Servlet读取文件内容并在页面打印输出
    HttpServletRequest接口实例化的使用
    Servlet小示例:jsp页面提交信息Servlet接收并打印输出
    Servlet中如何实现页面转发
    Servlet获取当前服务器的实际路径
  • 原文地址:https://www.cnblogs.com/Hunter-541695/p/7029456.html
Copyright © 2020-2023  润新知