将文件资产复制到SDCard活动(Android应用程序)需要创意

时间:2014-08-26 21:48:03

标签: java android

我需要将Assets中的所有文件夹复制到SDCARD上的特定文件夹中。让我们说我们的目标文件夹名为" RESULT_HERE"在名为" MAIN_FOLDER"的文件夹下

我使用了这段代码,但根本没有结果。无法复制文件甚至无法创建文件夹。 I used this code

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我修改代码以复制具有相同Assets文件夹结构的所有文件夹和文件。只需替换 CopyFiles 方法的代码。

private void CopyFiles(String sdCardPath, String assetFilename){
    AssetManager assetManager = getAssets();

    try {
        String[] files = assetManager.list(assetFilename);

        //Try as file
        if(files.length == 0){
            InputStream in;
            OutputStream out;

            String fileName = assetFilename.substring(assetFilename.lastIndexOf(File.separator) + 1);

            File file = new File(sdCardPath + File.separator + assetFilename.substring(0, assetFilename.length() - fileName.length()));
            if(!file.exists())
                file.mkdir();

            in = assetManager.open(assetFilename);
            out = new FileOutputStream(file.getAbsolutePath() + File.separator + fileName);

            copyFile(in, out);

            in.close();
            out.flush();
            out.close();
        }
        //Try as folder
        else{
            for (String assetFile : files){
                String newAssetFilename = assetFilename.length() > 0
                                                    ? assetFilename + File.separator  +assetFile // Is on internal folder
                                                    : assetFile;                                // Is on root of asset folder

                CopyFiles(sdCardPath, newAssetFilename);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

要调用此函数,您必须调用:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
        CopyFiles(Environment.getExternalStorageDirectory() + File.separator + INTERNAL_PATH, "");

其中 INTERNAL_PATH 是文件夹的相对路径。函数 Environment.getExternalStorageState()是为了确保SD卡存在。

此外,请记住,您必须在Manifest上声明以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />