在做项目时,经过会遇到资源替换问题。比如配音公司,提供了一批八九百个配音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]);
      }
    }

  }
}

AS3批量替换文件的更多相关文章

  1. Powershell 批量替换文件

    Powershell 批量替换文件 ##作者:Xiongpq ##时间:2015-06-10 18:50 ##版本:2.0 ##源文件目录 ##源文件目录的所有文件都会覆盖目标目录的同名文件,源文件目 ...

  2. Linux批量替换文件内容

    问题描述:现在需要将rack1目录下*.send文件中的"-ip="替换成“-localIp=10.0.0.1/n-ip=” 刚才那个批量文本内容替换,只能替换内存中的内容,并不会 ...

  3. perl命令批量替换文件内容

    转自:http://www.jbxue.com/article/12638.html 使用perl命令批量替换文件内容. 对linux下的文件内容进行替换,有时不用编写perl脚本,用perl命令就可 ...

  4. linux批量替换文件内容3种方法(perl,sed,shell)

    方法1:perl   这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个 pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把 ...

  5. linux下sed批量替换文件内容

    在linux超级终端下编辑文档是件比较麻烦的事情,下面简单介绍一下如何在linux下批量替换文件内容 linuxsed 批量替换多个文件中的字符串 格式: sed -i "s/查找字段/替换 ...

  6. Perl 使用perl命令批量替换文件内容

    对linux系统下面多个文本文件内容做处理,是SA经常需要完成的工作.如何高效的完成这个工作,perl应该是一个不错的语言工具.你甚至不需要编写perl脚本,用命令就可以完成上面的工作. perl 命 ...

  7. [转帖]Linux下批量替换文件内容方法

    Linux下批量替换文件内容方法 https://www.cnblogs.com/fjping0606/p/4428850.html 刚才用到的命令 原作者写的挺好的记录一下 以后 用. 1:查找fi ...

  8. linux下批量替换文件内容

    1.网络上现成的资料 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串: (此命令很强大) ...

  9. Linux下批量替换文件内容方法

    1:查找find . -type f -name "*.html"|xargs grep ‘yourstring’ 2:查找并替换find -name '要查找的文件名' | xa ...

随机推荐

  1. SSH框架搭建 详细图文教程

    转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...

  2. bzoj1487 [HNOI2009]无归岛

    Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛 上的任意两个生物,他们有且仅有 ...

  3. 实体类和数据表的映射异常(XXX is not mapping[ ])

    在使用SSH框架开发过程,使用hibernate框架提供的工具类实现与数据库数据交互,在执行cmd操作时,如果出现以下异常: org.hibernate.hql.ast.QuerySyntaxExce ...

  4. java实现对服务器的自动巡检邮件通知

    1.需求 之前一直是手动的巡检,然后贴图,最近服务器数量大增,有点忙不过来了.因为一直用的java,对shell脚本不是特别了解,所以这次用java写了个小项目,实现对多服务器,多任务的巡检,巡检结果 ...

  5. Lock使用实例

    using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; usin ...

  6. PowerDesigner 12.5破解方法

    PowerDesigner 12.5破解方法 创建于 2017-05-07 22:18:04   一.下载   1 . PowerDesigner 12.5 官方下载地址  http://downlo ...

  7. hdu1561 The more, The Better 树形DP+分组背包

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 思路: 典型的树形背包题目: 定义dp[i][j]表示以i为根节点,攻打j个城堡的获得的财宝的最 ...

  8. [转]亿级Web系统搭建:单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  9. 深入理解JAVA序列化

    如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题.静 ...

  10. 门面(Facade)模式

    门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的,设计师处理复杂系统的一个 ...