Android Assests目录遍历

背景

当一个Android app第一次安装到手机上并启动时,需要初始化一些数据,其中包括程序运行时所必须依赖的文件、数据库等,例如电话号码归属地数据库等,因此,可以在程序开发过程中可以将一些必要的数据或文件放在Assests(该文件夹下的内容不会被编译)目录下,这样做的好处是无需程序首次运行时还要联网下载这些数据;当然有利必有弊,其缺点apk大小相应的会增加。

思路

方法一:在Assests文件夹下放一个config.txt的文件。其中config文件内容为Assests目录下文件的名称及其路径(相对于Assests文件夹的路径),然后读取config文件里面的内容,然后根据文件的路径使用for循环copy指定目录即可
方法二: 直接便利Assests文件夹,然后使用正则表达式匹配出想要的文件名,存放在一个集合中,按照方法一完成后续工作。
说明:方法一主要针对Assests文件夹下目录结构很多时。方法二则为懒人做法,对于所有文件都在Assests文件夹下而无结构可分的情况下较为便利

事例代码:

匹配Assests文件夹下所有 xx.jpg格式的图片并放到sd卡的一个目录中:

        ArrayList<String> fileNames = new ArrayList<String>();
        Pattern pattern = Pattern.compile("[a-zA-Z]+(\\.jpg)$");
        try {
            String[] list = getAssets().list("");
            for (String fileName : list) {
                Matcher matcher = pattern.matcher(fileName);
                if (matcher.matches()) {
                    fileNames.add(fileName);
                }
            }
            AssetManager manager = getAssets();
            InputStream inputStream;
            FileOutputStream fileOutputStream;
            File file;
            for (String name : fileNames) {
                file = new File(FileUtils.getRecentChatPath(), name);
                if (file.exists()) {
                    continue;
                }
                inputStream = manager.open(name);
                fileOutputStream = new FileOutputStream(file);
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = inputStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, len);
                }
                fileOutputStream.flush();
                fileOutputStream.close();
                inputStream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值