Android:如何在SD卡上创建目录并从/ res / raw复制文件到它?

时间:2010-10-03 21:41:29

标签: android

我正在尝试在SD卡上创建一个文件夹和几个子目录...然后我想将我存储在/ res / raw中的文件传输到该文件夹​​...我另外,我希望这个只运行一次,这是程序第一次运行。我意识到这是荒谬的开放式的,而且我要求很多......但是我们将非常感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

这会将.apk assets文件夹的“clipart”子文件夹中的所有文件复制到SD卡上应用程序文件夹的“clipart”子文件夹中:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    String basepath = extStorageDirectory + "/name of your app folder on the SD card";
//...

// in onCreate
File clipartdir = new File(basepath + "/clipart/");
        if (!clipartdir.exists()) {
            clipartdir.mkdirs();
            copyClipart();      
        }

private void copyClipart() {
        AssetManager assetManager = getResources().getAssets();
        String[] files = null;
        try {
            files = assetManager.list("clipart");
        } catch (Exception e) {
            Log.e("read clipart ERROR", e.toString());
            e.printStackTrace();
        }
        for(int i=0; i<files.length; i++) {
            InputStream in = null;
            OutputStream out = null;
            try {
              in = assetManager.open("clipart/" + files[i]);
              out = new FileOutputStream(basepath + "/clipart/" + files[i]);
              copyFile(in, out);
              in.close();
              in = null;
              out.flush();
              out.close();
              out = null;
            } catch(Exception e) {
                Log.e("copy clipart ERROR", e.toString());
                e.printStackTrace();
            }       
        }
    }
    private void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1){
          out.write(buffer, 0, read);
        }
    }

答案 1 :(得分:0)

我在使用mkdirs()时遇到了类似的问题,但是因为运行命令:

  

mkdir one / two

在Linux上失败,然后方法http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs()也失败了。我想这意味着在Android上无法使用mkdirs?我的(可能相当hacky)解决办法是分别创建每个必要的目录:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
new File(extStorageDirectory + "/one/").mkdirs();
new File(extStorageDirectory + "/one/two/).mkdirs();