如何从assets文件夹创建目录并存储文件?

时间:2012-01-27 13:00:25

标签: android file sd-card android-sdcard android-assets

我使用下面的代码将文件从资产复制到Sdcard。

代码:

  File file3 = new File("/sdcard/Alone.mp4");
    if(!(file3.exists())) {
        ArrayList<String> files = new ArrayList<String>();
        files.add("Alone.mp4");
        new myAsyncTask().execute(files);
    }

// AsyncTass for the Progress Dialog and to do Background Process
private class myAsyncTask extends AsyncTask<ArrayList<String>, Void, Void> {         
    ArrayList<String> files;         
    ProgressDialog dialog;         
    @Override         
    protected void onPreExecute() {             
        dialog = ProgressDialog.show(MainScreenActivity.this, "Speech Tutor", "Loading...");         
    }         
    @Override         
    protected Void doInBackground(ArrayList<String>... params) {              
        files = params[0];             
        for (int i = 0; i < files.size(); i++) {                 
            copyFileFromAssetsToSDCard(files.get(i));                
        }             return null;         
    }         
    @Override         
    protected void onPostExecute(Void result) {             
        dialog.dismiss();         
    }      
} 

    // Function to copy file from Assets to the SDCard
    public void copyFileFromAssetsToSDCard(String fileFromAssets){
        AssetManager is = this.getAssets();
        InputStream fis;
        try {

            fis = is.open(fileFromAssets);
            FileOutputStream fos;
//          if (!APP_FILE_PATH.exists()) {
//                APP_FILE_PATH.mkdirs();
//            }
            fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory(),fileFromAssets));
            byte[] b = new byte[8];
            int i;
            while ((i = fis.read(b)) != -1) {
                fos.write(b, 0, i);
            }
            fos.flush();
            fos.close();
            fis.close();
        } 
        catch (IOException e1) {
            e1.printStackTrace();
        }
    }

现在,通过上面的代码,我可以将文件从资产复制到SD卡。但不是我想要的是将复制文件存储到SD卡中可用的另一个目录。

那怎么办?

感谢。

1 个答案:

答案 0 :(得分:2)

如果要将文件存储在SD卡的某个特定文件夹中,则以下是代码。

Environment.getExternalStorageDirectory()+“/ folderName /”

如果您期待创建一个新文件夹,那么以下是代码。

String tempDir = Environment.getExternalStorageDirectory() + "/" + getResources().getString(R.string.foldername) + "/";
    prepareDirectory(); 


private boolean prepareDirectory(){
    try {
        if (makedirs()){
            return true;
        } else {
            return false;
        }
    } catch (Exception e){
        e.printStackTrace();
        Toast.makeText(this, "Could not initiate File System.. Is Sdcard mounted properly?", 1000).show();
        return false;
    }
}

private boolean makedirs(){
    File tempdir = new File(tempDir);
    if (!tempdir.exists())
        tempdir.mkdirs();

    if (tempdir.isDirectory()){
        File[] files = tempdir.listFiles();
        for (File file : files){
            if (!file.delete()){
            }
        }
    }
    return (tempdir.isDirectory());
}