2013-02-28 77 views
1

我正在尝试备份我的收件箱短信SD卡在一个文件夹中。但我不能够就SD卡文件夹中我使用这个代码如何在android中的SD卡中制作文件夹

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://计算器.COM /问题/ 2130932 /如何到创建目录,自动上-SD卡 – viedee 2013-06-27 05:37:24

回答

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); 

注:如果手机自带沿其具有比SD卡以外的东西它可能是明智的使用Environment.getExternalStorageDirectory()用于获取“SD卡”目录,因为这可能会改变(如内置闪光灯,a'la iPhone)。无论哪种方式,你应该记住,你需要检查,以确保它实际上存在,因为SD卡可能被删除。

更新:由于API级别4(1.6),您还必须申请许可。像这样的东西(在清单)应该工作:

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

同时检查SD卡安装

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,而不是/

相关问题