0

私は自分のSDカードにSMSをバックアップしようとしていますが、それは機能していますが、バックアップを取っているときに以前に保存されたファイルを削除するという問題が1つあります。しかし、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();
           }

        }
    });  

私がAndroidを初めて使用するのを手伝ってください。前もって感謝します

4

2 に答える 2

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 にファイルが作成されます。

于 2013-02-13T14:53:07.747 に答える
1

あなたが正確に求めていることを理解した場合、SMS.csv ファイルが上書きされており、このファイルを上書きする代わりに、追加のファイルを追加し続けたいと考えています。

この線

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

のようなものに変更する必要があります

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

これにより、毎回新しいバックアップ ファイルが作成されます。

于 2013-02-13T13:40:20.873 に答える