0

我正在使用下面的代码将文件从资产复制到 SD 卡。

代码:

  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();
        }
    }

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

那怎么办??

谢谢。

4

1 回答 1

2

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

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());
} 
于 2012-01-27T13:58:15.003 回答