2010-08-26 5 views
0

У меня есть этот код:я Родитель каталог файла не доступен для записи для экспорта SDCard

public static class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> { 
    private Context ctx; 

    /** 
    * 
    */ 
    public ExportDatabaseFileTask(Context ctx) { 
     super(); 
     this.ctx = ctx; 
    } 

    // automatically done on worker thread (separate from UI thread) 
    protected Boolean doInBackground(final String... args) { 

     File dbFile = new File(Environment.getDataDirectory() 
       + "/data/com.mypkg/databases/log.db"); 

     File exportDir = new File(Environment.getExternalStorageDirectory(), ""); 
     if (!exportDir.exists()) { 
      exportDir.mkdirs(); 
     } 
     File file = new File(exportDir, dbFile.getName()); 

     try { 
      file.createNewFile();//* 
      this.copyFile(dbFile, file); 
      return true; 
     } catch (IOException e) { 
      Log.e("mytag", e.getMessage(), e); 
      return false; 
     } 
    } 

    // can use UI thread here 
    protected void onPostExecute(final Boolean success) { 
     if (success) { 
      Toast.makeText(ctx, "Export successful!", Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(ctx, "Export failed", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    void copyFile(File src, File dst) throws IOException { 
     FileChannel inChannel = new FileInputStream(src).getChannel(); 
     FileChannel outChannel = new FileOutputStream(dst).getChannel(); 
     try { 
      inChannel.transferTo(0, inChannel.size(), outChannel); 
     } finally { 
      if (inChannel != null) 
       inChannel.close(); 
      if (outChannel != null) 
       outChannel.close(); 
     } 
    } 

} 

На отмеченной линии

file.createNewFile(); 

Я получаю java.io.IOException: Parent directory of file is not writable: /sdcard/log.db

У меня есть sdcard, и я могу легко скопировать туда файлы. Что может быть неправильным?

ответ

4

Просто, когда кто-то мчится он делает ошибки

это было отсутствует разрешение

<uses-permission 
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
+0

Я просто сделал ту же самую вещь вчера. Я думаю, что забавно, что эта проблема не возникает, если вы нацелились на 1,5, но если вы нацелились на 1.6+, вы должны иметь разрешение –

Смежные вопросы