在做项目时,经过会遇到资源替换问题。比如配音公司,提供了一批八九百个配音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. 移动端 H5图片裁剪插件,内置简单手势操作

    前面曾经写过一篇<H5图片裁剪升级版>,但里面需要借助第三方手势库,这次就不需要使用手势库,全部封装在代码中. 下图是裁剪的展示,下面就做了拖放和裁剪,没有做缩放,在插件中需要用到大量的计 ...

  2. final的用法

    先来看一段代码 class Car extends Vehicle {     public static void main (String[] args)     {         new  C ...

  3. Maven的简单搭建

    Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.接下来将从下面几个方向介绍maven: (1)Maven简单介绍 (2)Maven安装与配置 (3)Maven ...

  4. Hopfield神经网络实现污染字体的识别

    这个网络的内部使用的是hebb学习规则 贴上两段代码: package geym.nn.hopfiled; import java.util.Arrays; import org.neuroph.co ...

  5. 学习笔记:javascript 文档对象(document)

    1.documnet函数 方法 描述 close() 关闭用 document.open() 方法打开的输出流,并显示选定的数据. getElementById() 返回对拥有指定 id 的第一个对象 ...

  6. Asp.Net Core 中获取应用程序物理路径(Getting the Web Root Path and the Content Root Path in ASP.NET Core)

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  7. Linux增加磁盘操作

    首先,增加磁盘分为4个大步骤:1.插上硬盘:2.分区;3.格式化4.挂载,然后分别说说以上四步的具体事项和注意内容. 1.插上硬盘(本位以虚拟机为例) 新买来一块磁盘,把磁盘插到主板上.虚拟机中操作如 ...

  8. java线程总结3--synchronized关键字,原理以及相关的锁

    在多线程编程中,synchronized关键字非常常见,当我们需要进行"同步"操作时,我们很多时候需要该该关键字对代码块或者方法进行锁定.被synchronized锁定的代码块,只 ...

  9. Sqlla: 数据库操作从未如此简单

    Sqlla 一套数据库的 ORM 微型库,提供简单高效的 API 来操作数据库. Sqlla 拥有极少的API,使用方式简单.让开发者不需要关心数据库操作的具体细节,只需专注SQL和业务逻辑.同时简单 ...

  10. linux系统管理--查看进程

    关于进程的查看,大家都不会陌生 ,主要是ps和pstree命令. ps  aux    查看系统中所有进程,使用BSD操作系统格式.(注意:不是ps -aux) 执行结果 USER :该进程是由哪个用 ...