`

从assets目录复制文件夹和文件,(不只是文件,附demo)

阅读更多

最近要将时钟的一些资源做成文件夹放到apk中,然后用户安装的时候复制到SD卡,由于时间比较紧急,就没有做压缩和解压缩的处理,但是问题来了,文件夹最好的放置位置是assest目录,但是通常我们使用的方法都是open(文件名);来获得流,也就是必须知道整个文件的路径,但是我想的是将整个文件夹复制,android并没有提供这样的方法,纠结了好久,终于发现了一个方法list(目录名)。list里的参数是assets目录下的一个目录名,list(目录名)这会得到该目录下的文件和子文件夹,但是我却得不到文件夹的路径,所以只好遍历其子文件夹再用open(文件名);来一个一个文件复制。

/**
     * 从assets目录下拷贝整个文件夹,不管是文件夹还是文件都能拷贝
     * 
     * @param context
     *            上下文
     * @param rootDirFullPath
     *            文件目录,要拷贝的目录如assets目录下有一个SBClock文件夹:SBClock
     * @param targetDirFullPath
     *            目标文件夹位置如:/sdcrad/SBClock
     */
    public static void copyFolderFromAssets(Context context, String rootDirFullPath, String targetDirFullPath) {
        Log.d(TAG, "copyFolderFromAssets " + "rootDirFullPath-" + rootDirFullPath + " targetDirFullPath-" + targetDirFullPath);
        try {
            String[] listFiles = context.getAssets().list(rootDirFullPath);// 遍历该目录下的文件和文件夹
            for (String string : listFiles) {// 看起子目录是文件还是文件夹,这里只好用.做区分了
                Log.d(TAG, "name-" + rootDirFullPath + "/" + string);
                if (isFileByName(string)) {// 文件
                    copyFileFromAssets(context, rootDirFullPath + "/" + string, targetDirFullPath + "/" + string);
                } else {// 文件夹
                    String childRootDirFullPath = rootDirFullPath + "/" + string;
                    String childTargetDirFullPath = targetDirFullPath + "/" + string;
                    new File(childTargetDirFullPath).mkdirs();
                    copyFolderFromAssets(context, childRootDirFullPath, childTargetDirFullPath);
                }
            }
        } catch (IOException e) {
            Log.d(TAG, "copyFolderFromAssets " + "IOException-" + e.getMessage());
            Log.d(TAG, "copyFolderFromAssets " + "IOException-" + e.getLocalizedMessage());
            e.printStackTrace();
        }
    }

 

private static boolean isFileByName(String string) {
        if (string.contains(".")) {
            return true;
        }
        return false;
    }

 

/**
     * 从assets目录下拷贝文件
     * 
     * @param context
     *            上下文
     * @param assetsFilePath
     *            文件的路径名如:SBClock/0001cuteowl/cuteowl_dot.png
     * @param targetFileFullPath
     *            目标文件路径如:/sdcard/SBClock/0001cuteowl/cuteowl_dot.png
     */
    public static void copyFileFromAssets(Context context, String assetsFilePath, String targetFileFullPath) {
        Log.d(TAG, "copyFileFromAssets ");
        InputStream assestsFileImputStream;
        try {
            assestsFileImputStream = context.getAssets().open(assetsFilePath);
            FileHelper.copyFile(assestsFileImputStream, targetFileFullPath);
        } catch (IOException e) {
            Log.d(TAG, "copyFileFromAssets " + "IOException-" + e.getMessage());
            e.printStackTrace();
        }
    }

 

复制过程的log:

 

 

  • 大小: 395.6 KB
1
0
分享到:
评论
1 楼 格子衫星人 2018-04-21  
不行 红米手机 版本21 测试失败

相关推荐

    Unity打包发布后正确读取StreamingAssets文件夹下的Html文件DEMO

    在Android上,Unity会将StreamingAssets文件夹的内容复制到APK的assets目录下,而在iOS上则会被包含在.app包内。因此,在打包后,我们需要根据目标平台来调整读取文件的策略。 为了在Unity中正确读取Streaming...

    Android复制assets文件到SD卡

    Android复制assets文件到SD卡是一种常见的文件操作,目的是将应用程序的assets文件夹中的文件复制到SD卡上,以便于应用程序的数据存储和读取。本文将详细介绍Android复制assets文件到SD卡的方法,包括使用线程池和...

    android中复制资源文件中的数据库文件到sd卡或内存源码

    5. **调用复制方法**:在应用启动时调用上面定义的`copyFileFromAssetsToPath()`方法,将数据库文件从assets复制到目标路径。 ```java if (!copyFileFromAssetsToPath(context, "myDatabase.db", targetPath)) { /...

    复制sqlite数据库的demo

    本demo实现了程序启动时,从assets文件夹中复制sqlite文件到程序的功能,里面带了一个sqlite查看工具,sqlite分割工具,详细说明文档。复制sqlite速度还算比较快。程序启动后,Log会输出结果,也可以使用adb shell...

    安卓Android源码——仿iphone气泡短信DEMO.zip

    【描述】"安卓Android源码——仿iphone气泡短信DEMO.zip" 描述了这个项目的主要内容,即一段源代码,它是一个DEMO,用于展示如何在Android应用中复制iPhone的气泡式短信显示效果。开发者可以参考此DEMO学习如何在...

    1000个网页小图标demo

    6. **assets文件夹**:此文件夹通常包含实际的图标资源,如图像文件或CSS样式表。开发者需要将这些文件引入到自己的项目中,以便正确显示图标。 7. **使用方法**:引入CSS文件后,开发者可以通过类名引用特定的图标...

    IOS打包Bundle与加载Demo

    在Xcode中,可以右键点击项目中的"Assets.xcassets"或"Resources"文件夹,选择"Add Files to ResourcesBundle",然后选择要添加的资源。记得勾选"Copy items if needed",以确保文件被复制到Bundle中。 接下来,...

    DragonBonesCSharp-master.zip

    2. 分别复制 [DragonBones 公共库源码](../DragonBones/src/)、[DragonBones Unity 库源码](./src/)、[第三方库源码](../3rdParty/) 中的所有文件夹和文件到项目的 Assets/Scripts 文件夹下。 3. 运行项目。 ## ...

    小程序源码 多点缩放字体DEMO .rar

    6. `assets`:这个文件夹通常用于存储应用的非资源文件,如原始的文本、音频、数据文件等,这些文件在编译时不会被处理,而是原样复制到APK中。 7. `src`:源代码目录,通常包含Java代码或者Kotlin代码,用于实现...

    分享插件的使用心得

    然后,把需要的文件直接复制过来,包括 assets、libs、res 三个文件夹。并找到这三个文件,一起复制过来。 在 libs 文件夹下,我们需要将 ShareSDK.jar 放置其中,这里都是 jar 文件,其中有大部分都是用不到的,把...

    KODExplorer 芒果云-资源管理器

    - 树目录和文件列表一致性保持 更新相互通知 ####fix bug:(bug解决和程序优化) - 桌面重命名bug - 统一对话框部分bug - php notice 提示解决 - ajax返回非json 则展示服务错误的返回 - 所有入口都加入index...

    一个nuxt版的 vue-quill-editor demo

    `assets`目录下的资源会被编译处理,而`static`目录的资源会被直接复制到构建后的静态文件夹,可用于放置如自定义样式文件、图片等。 总的来说,这个Nuxt版的Vue-Quill-Editor demo提供了一个集成示例,帮助开发者...

    Unity JSON创建编写!自定义编写格式,分类 项目demo,亲测好用

    StreamingAssets是Unity的一个特殊目录,它在构建项目时会被原封不动地复制到构建的目标平台上,通常用于存放不会被版本控制的资源,如配置文件、数据库或动态更新的内容。 为了自定义JSON的编写格式,我们需要了解...

    android project src

    在提供的文件列表中,“androidproject”可能是指整个项目的根目录,包含了上述所有提到的文件和目录。为了进一步了解和使用这个项目,你需要解压文件并使用Android Studio打开,这样可以查看和编辑源代码,编译并...

    ShareSDK分享.docx

    - 将生成的 "硅谷商城" 文件夹中的 assets 目录复制到你的项目主目录下的 assets 目录。 - 将 "硅谷商城" 中的 libs 文件夹中的 jar 包添加到你的项目库中。 - 把 res 目录中的配置文件复制到你的项目资源文件夹...

    ioskfx.docx

    - 从`demo`中复制`nav`目录下的所有文件到项目,并添加到项目中。 - 修改首页控制器,实现标题的展示效果。 7. **轮播图实现** - 将`swiper`文件夹中的所有文件拷贝到项目中。 - 在首页控制器中进行相应修改以...

    flutter_tiktok-master_flutter_fluttertiktok_抖音_抖音界面demo_

    通常包含项目的根目录结构,包括`lib`(源代码)、`assets`(资源文件)、`pubspec.yaml`(项目配置)、`screens`(屏幕组件)、`widgets`(自定义小部件)、`services`(服务类,如网络请求)等文件夹。开发者可能...

    Android开机画面修改

    - 将转换后的`initlogo.rle`文件复制到`android\out\target\product\sdkDemo\root`目录下。 - 如果没有放置该文件,则默认显示的是`init.Cinit.c.bak`文件中的内容。 4. **重新编译:** - 执行`make firmware`...

    demo

    通过安装Chirpy时,Jekyll只能从主题的gem读取_includes , _layout , _sass和assets文件夹中的文件以及_config.yml文件的一小部分(使用命令bundle info --path jekyll-theme-chirpy查找)。 要完全使用Chirpy的...

Global site tag (gtag.js) - Google Analytics