Android: Как создать каталог на SD-карте и скопировать на него файлы из / res / raw? - PullRequest
8 голосов
/ 04 октября 2010

Я пытаюсь создать папку и несколько подкаталогов в ней на SD-карте ... Затем я хочу перенести файлы, которые хранятся в / res / raw, в эту папку ... Кроме того, я хочу происходит только один раз, когда программа запускается впервые. Я понимаю, что это смехотворно открыто, и что я прошу много ... но любая помощь будет принята с благодарностью.

Ответы [ 2 ]

9 голосов
/ 27 марта 2011

При этом будут скопированы все файлы в подпапке "clipart" папки активов .apk в подпапку "clipart" папки вашего приложения на SD-карте:

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 голосов
/ 08 апреля 2011

Я столкнулся с подобной проблемой при использовании mkdirs (), однако, потому что при запуске команды:

mkdir one / two

не работает в Linux, тогда метод http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs() впоследствии тоже терпит неудачу.Я думаю, это означает, что нет способа использовать mkdirs на Android?Мой (вероятно, довольно хакерский) обходной путь состоял в том, чтобы создать каждый необходимый каталог отдельно:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
new File(extStorageDirectory + "/one/").mkdirs();
new File(extStorageDirectory + "/one/two/).mkdirs();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...