Android: How to create a directory on the SD Card and copy files from /res/raw to it?

后端 未结 2 1361
眼角桃花
眼角桃花 2020-12-03 12:29

I am trying to create a folder and several subdirectory within it on the SD Card... I then want to transfer files that I have stored in /res/raw to that folder... I addition

相关标签:
2条回答
  • 2020-12-03 13:02

    I experienced a similar problem when using mkdirs(), however because running the command:

    mkdir one/two

    fails on Linux, then the method http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs() subsequently fails too. I guess this means there is no way to use mkdirs on Android? My (probably rather hacky) work-around was to create each necessary directory separately:

    String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    new File(extStorageDirectory + "/one/").mkdirs();
    new File(extStorageDirectory + "/one/two/).mkdirs();
    
    0 讨论(0)
  • 2020-12-03 13:12

    This will copy all files in the "clipart" subfolder of the .apk assets folder to the "clipart" subfolder of your app's folder on the SD card:

    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);
            }
        }
    
    0 讨论(0)
提交回复
热议问题