如何在android中写入sd卡

时间:2013-02-13 13:29:21

标签: android sd-card

我正在尝试在我的SD卡上备份短信及其工作但是当我正在进行备份时它有一个问题就是删除以前存储的文件。但我想保留我的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"+".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();
           }

        }
    });  

请帮我解决我的新手问题。提前谢谢

2 个答案:

答案 0 :(得分:2)

我无法将代码发布为您要求创建目录的注释。

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + 
    "/" + getPackageName() + 
    "/SMS-" + System.currentTimeMillis() + 
    ".csv");

if(file.mkdirs()) {
    // your code here for writing the file
    // your file is now at /sdcard/your.apps.package.name/sms-currenttime.csv
}

这应该在/sdcard/your.apps.package.name/sms-currenttime.csv

创建一个文件

答案 1 :(得分:1)

如果我理解你的要求是正确的,那么你的SMS.csv文件被覆盖了,你想继续添加其他文件而不是写这个文件。

该行

String smsFile = "SMS"+".csv";

需要更改为

String smsFile = "SMS-" + SystemClock.currentThreadTimeMillis() + ".csv";

这应该每次都创建一个新的备份文件。