2013-02-28 3 views
1

Я пытаюсь сделать backup мой почтовый ящик sms на SD-карта в папке. но я не в состоянии сделать папку на SD карте я использую этот кодКак сделать папку в sdcard в android

backup=(Button)findViewById(R.id.backup); 
backup.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 

     backupSMS(); 
    } 
     public ArrayList<String> smsBuffer = new ArrayList<String>(); 
      String smsFile = "SMS-" + SystemClock.currentThreadTimeMillis() + ".csv"; 

    private void backupSMS() { 
     smsBuffer.clear(); 
     Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox"); 
     Cursor cursor1 = getContentResolver().query(
       mSmsinboxQueryUri, 
       new String[] { "_id", "thread_id", "address", "person", "date", 
         "body", "type" }, null, null, null); 
     //startManagingCursor(cursor1); 
     String[] columns = new String[] { "_id", "thread_id", "address", "person", "date", "body", 
       "type" }; 
     if (cursor1.getCount() > 0) { 
      String count = Integer.toString(cursor1.getCount()); 
      Log.d("Count",count); 
      while (cursor1.moveToNext()) { 

       String messageId = cursor1.getString(cursor1 
         .getColumnIndex(columns[0])); 

       String threadId = cursor1.getString(cursor1 
         .getColumnIndex(columns[1])); 

       String address = cursor1.getString(cursor1 
         .getColumnIndex(columns[2])); 
       String name = cursor1.getString(cursor1 
         .getColumnIndex(columns[3])); 
       String date = cursor1.getString(cursor1 
         .getColumnIndex(columns[4])); 
       String msg = cursor1.getString(cursor1 
         .getColumnIndex(columns[5])); 
       String type = cursor1.getString(cursor1 
         .getColumnIndex(columns[6])); 



       smsBuffer.add(messageId + ","+ threadId+ ","+ address + "," + name + "," + date + " ," + msg + " ," 
         + type); 

      }   
      generateCSVFileForSMS(smsBuffer); 
     }    
    } 


    private void generateCSVFileForSMS(ArrayList<String> list) 
    { 

     try 
     { 
      String storage_path = Environment.getExternalStorageDirectory().toString() + File.separator + smsFile; 
      FileWriter write = new FileWriter(storage_path); 

      write.append("messageId, threadId, Address, Name, Date, msg, type"); 
      write.append('\n'); 
      write.append('\n'); 


      for (String s : list) 
      { 
       write.append(s); 
       write.append('\n'); 
      } 
      write.flush(); 
      write.close(); 
     } 

     catch (NullPointerException e) 
     { 
      System.out.println("Nullpointer Exception "+e); 
      // e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 
}); 

с этим кодом, я могу резервного копирования но не в папке. пожалуйста, помогите мне, я новичок в android заблаговременно

+1

Для получения более подробной информации, Вы можете обратиться к [это] [1] [1]: HTTP: // StackOverflow .com/вопросы/2130932/как к созданию-каталог автоматически-на-SD-карты – viedee

ответ

6

Если вы создаете объект File, который обертывает каталог верхнего уровня, вы можете назвать его методом mkdirs() для создания всех необходимых каталогов. Что-то вроде:

// create a File object for the parent directory 
File wallpaperDirectory = new File("/sdcard/Wallpaper/"); 
// have the object build the directory structure, if needed. 
wallpaperDirectory.mkdirs(); 
// create a File object for the output file 
File outputFile = new File(wallpaperDirectory, filename); 
// now attach the OutputStream to the file object, instead of a String representation 
FileOutputStream fos = new FileOutputStream(outputFile); 

Примечание: Было бы разумно использовать Environment.getExternalStorageDirectory() для получения «SD Card» каталог, так как это может измениться, если телефон приходит, по которому есть нечто иное, чем карта SD (например, встроенная вспышка, a'la iPhone). В любом случае вы должны иметь в виду, что вам нужно проверить, чтобы убедиться, что он на самом деле существует, поскольку SD-карта может быть удалена.

ОБНОВЛЕНИЕ: С API 4-го уровня (1.6) вам также потребуется запросить разрешение. Нечто подобное (в манифесте) должно работать:

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

Также проверьте, если SDCard установлен

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
{ 
    // sd card mounted 
} 

File direct = new File(Environment.getExternalStorageDirectory() + "/YourFolder"); 

if(!direct.exists()) 
{ 
    if(direct.mkdir()) 
     { 
     //directory is created; 
     } 

} 

Я забыл упомянуть, что вам необходимо предоставить разрешение в явном

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

С вышеуказанным разрешением у вас также будет разрешение на чтение.

Также лучше использовать File.seperator вместо /

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