Android 将assets文件夹内的内容写入到SD卡中

Android 将assets文件夹内的内容写入到SD卡中

问题描述:

在网上看到一些方法都是文件的单个写入,如果assets文件夹内有复杂的文件夹目录结构,怎么把里面的所有文件夹及其子文件一起写入到SD卡中呢?

public static void CopyAssets(Context context, String assetDir, String dir) {
String[] files;
try {
files = context.getResources().getAssets().list(assetDir);
} catch (IOException e1) {
return;
}
File mWorkingPath = new File(dir);
// if this directory does not exists, make one.
if (!mWorkingPath.exists()) {
if (!mWorkingPath.mkdirs()) {

    }
}

for (int i = 0; i < files.length; i++) {
    try {
        String fileName = files[i];
        // we make sure file name not contains '.' to be a folder.
        if (!fileName.contains(".")) {
            if (0 == assetDir.length()) {
                CopyAssets(context, fileName, dir + fileName + "/");
            } else {
                CopyAssets(context, assetDir + "/" + fileName, dir+ fileName + "/");
            }
            continue;
        }
        File outFile = new File(mWorkingPath, fileName);
        if (outFile.exists())
            outFile.delete();
        InputStream in = null;
        if (0 != assetDir.length())
            in = context.getAssets().open(assetDir + "/" + fileName);
        else
            in = context.getAssets().open(fileName);
        OutputStream out = new FileOutputStream(outFile);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }

        in.close();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}