Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android遞歸拷貝assets資源到指定目錄

Android遞歸拷貝assets資源到指定目錄

編輯:關於Android編程

本來遞歸拷貝文件夾是很容易的, 但是Android的assets提供的接口沒有文件操作那麼方便, 昨天寫了一個方法來實現把assets資源拷貝到指定目錄,

 

/**
     * copy assets to releaseDir with full path
     * 
     * @author brian
     * @param context
     * @param assetsDir
     * @param releaseDir
     */
    public static void releaseAssets(Context context, String assetsDir,
            String releaseDir) {

        if (TextUtils.isEmpty(releaseDir)) {
            return;
        } else if (releaseDir.endsWith(/)) {
            releaseDir = releaseDir.substring(0, releaseDir.length() - 1);
        }

        if (TextUtils.isEmpty(assetsDir) || assetsDir.equals(/)) {
            assetsDir = ;
        } else if (assetsDir.endsWith(/)) {
            assetsDir = assetsDir.substring(0, assetsDir.length() - 1);
        }

        AssetManager assets = context.getAssets();
        try {
            String[] fileNames = assets.list(assetsDir);//只能獲取到文件(夾)名,所以還得判斷是文件夾還是文件
            if (fileNames.length > 0) {// is dir
                for (String name : fileNames) {
                    if (!TextUtils.isEmpty(assetsDir)) {
                        name = assetsDir + / + name;//補全assets資源路徑
                    }
//                    Log.i(, brian name= + name);
                    String[] childNames = assets.list(name);//判斷是文件還是文件夾
                    if (!TextUtils.isEmpty(name) && childNames.length > 0) {
                        releaseAssets(context, name, releaseDir);//遞歸, 因為資源都是帶著全路徑, 
                                                                                           //所以不需要在遞歸是設置目標文件夾的路徑
                    } else {
                        InputStream is = assets.open(name);
                        FileUtil.writeFile(releaseDir + / + name, is);
                    }
                }
            } else {// is file
                InputStream is = assets.open(assetsDir);
                // 寫入文件前, 需要提前級聯創建好路徑, 下面有代碼貼出
                FileUtil.writeFile(releaseDir + / + assetsDir, is);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
級聯創建folder
    public static void checkFolderExists(String path) {
        File file = new File(path);
        if (file.exists() && !file.isDirectory() || !file.exists()) {
            file.mkdirs();
        }
    }
 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved