Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将联系人或短信以.xml文件或.csv文件的形式备份到SD卡并在以后还原_Java_Android_Sms_Backup_Contacts - Fatal编程技术网

Java 如何将联系人或短信以.xml文件或.csv文件的形式备份到SD卡并在以后还原

Java 如何将联系人或短信以.xml文件或.csv文件的形式备份到SD卡并在以后还原,java,android,sms,backup,contacts,Java,Android,Sms,Backup,Contacts,我正在尝试在我的应用程序中开发一项功能,将短信和联系人以.xml或.csv格式备份到SD卡,并在以后恢复 所以,请任何人给我一些建议或一些示例代码或任何与此相关的资源链接 提前感谢package com.vcard; package com.vcard; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import

我正在尝试在我的应用程序中开发一项功能,将短信和联系人以.xml或.csv格式备份到SD卡,并在以后恢复

所以,请任何人给我一些建议或一些示例代码或任何与此相关的资源链接

提前感谢

package com.vcard;
package com.vcard;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;

import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;

public class VCardActivity extends Activity 
{
Cursor cursor;
ArrayList<String> vCard ;
String vfile;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    vfile = "Contacts" + "_" + System.currentTimeMillis()+".vcf";
    /**This Function For Vcard And here i take one Array List in Which i store every Vcard String of Every Conatact
     * Here i take one Cursor and this cursor is not null and its count>0 than i repeat one loop up to cursor.getcount() means Up to number of phone contacts.
     * And in Every Loop i can make vcard string and store in Array list which i declared as a Global.
     * And in Every Loop i move cursor next and print log in logcat.
     * */
    getVcardString();

}
private void getVcardString() {
    // TODO Auto-generated method stub
    vCard = new ArrayList<String>();
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    if(cursor!=null&&cursor.getCount()>0)
    {
        cursor.moveToFirst();
        for(int i =0;i<cursor.getCount();i++)
        {

            get(cursor);
            Log.d("TAG", "Contact "+(i+1)+"VcF String is"+vCard.get(i));
            cursor.moveToNext();
        }

    }
    else
    {
        Log.d("TAG", "No Contacts in Your Phone");
    }

}

public void get(Cursor cursor)
{


    //cursor.moveToFirst();
    String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
    AssetFileDescriptor fd;
    try {
        fd = this.getContentResolver().openAssetFileDescriptor(uri, "r");

        // Your Complex Code and you used function without loop so how can you get all Contacts Vcard.??


       /* FileInputStream fis = fd.createInputStream();
        byte[] buf = new byte[(int) fd.getDeclaredLength()];
        fis.read(buf);
        String VCard = new String(buf);
        String path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile;
        FileOutputStream out = new FileOutputStream(path);
        out.write(VCard.toString().getBytes());
        Log.d("Vcard",  VCard);*/

        FileInputStream fis = fd.createInputStream();
        byte[] buf = new byte[(int) fd.getDeclaredLength()];
        fis.read(buf);
        String vcardstring= new String(buf);
        vCard.add(vcardstring);

        String storage_path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile;
        FileOutputStream mFileOutputStream = new FileOutputStream(storage_path, false);
        mFileOutputStream.write(vcardstring.toString().getBytes());

    } catch (Exception e1) 
    {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
}
导入java.io.File; 导入java.io.FileInputStream; 导入java.io.FileOutputStream; 导入java.util.ArrayList; 导入android.app.Activity; 导入android.content.res.AssetFileDescriptor; 导入android.database.Cursor; 导入android.net.Uri; 导入android.os.Bundle; 导入android.os.Environment; 导入android.provider.contacts合同; 导入android.util.Log; 导入android.view.view; 公共类VCardActivity扩展了活动 { 光标; ArrayList vCard; 字符串vfile; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); vfile=“Contacts”+“\u”+System.currentTimeMillis()+”.vcf”; /**此函数用于Vcard,这里我使用一个数组列表,其中存储每个Conatact的每个Vcard字符串 *这里我取一个游标,这个游标不是空的,它的计数>0,然后我重复一个循环到游标。getcount()表示最多有多少个电话联系人。 *在每个循环中,我可以生成vcard字符串并存储在数组列表中,我将其声明为全局数组。 *在每个循环中,我移动光标,然后在logcat中打印日志。 * */ getVcardString(); } 私有void getVcardString(){ //TODO自动生成的方法存根 vCard=新的ArrayList(); cursor=getContentResolver().query(ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,null); if(cursor!=null&&cursor.getCount()>0) { cursor.moveToFirst(); 对于(int i=0;i
public ArrayList smsBuffer=new ArrayList();
字符串smsFile=“SMS”+“.csv”;
私有无效备份(){
smsBuffer.clear();
Uri MSMSSinboxQueryURI=Uri.parse(“content://sms");
游标cursor1=getContentResolver().query(
MSMSSinboxQueryuri,
新字符串[]{“\u id”,“thread\u id”,“address”,“person”,“date”,
“body”,“type”},null,null,null);
//开始管理游标(游标1);
String[]columns=新字符串[]{“\u id”、“线程id”、“地址”、“人员”、“日期”、“正文”,
“类型”};
if(cursor1.getCount()>0){
字符串计数=整数.toString(cursor1.getCount());
Log.d(“计数”,计数);
while(cursor1.moveToNext()){
String messageId=cursor1.getString(cursor1
.getColumnIndex(列[0]);
String threadId=cursor1.getString(cursor1
.getColumnIndex(列[1]);
字符串地址=cursor1.getString(cursor1
.getColumnIndex(列[2]);
String name=cursor1.getString(cursor1
.getColumnIndex(列[3]);
String date=cursor1.getString(cursor1
.getColumnIndex(列[4]);
String msg=cursor1.getString(cursor1
.getColumnIndex(列[5]);
字符串类型=cursor1.getString(cursor1
.getColumnIndex(列[6]);
添加(messageId+,“+threadId+”,“+address+”,“+name+”,“+date+”,“+msg+”,”
+类型);
}           
生成CSVFILEFORMS(smsBuffer);
}               
}
专用void generateCSvFileForMs(ArrayList列表)
{
尝试
{
String storage_path=Environment.getExternalStorageDirectory().toString()+File.separator+smsFile;
FileWriter write=新的FileWriter(存储路径);
附加(“messageId,threadId,地址,名称,日期,消息,类型”);
write.append('\n');
用于(字符串s:列表)
{
写入、追加;
write.append('\n');
}
write.flush();
write.close();
}
捕获(NullPointerException e)
{
System.out.println(“空指针异常”+e);
//e.printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
捕获(例外e)
{
e、 printStackTrace();
}
}

mmh既然你自己编写了备份工具,你应该知道它实际上在备份什么。@peter,你能给我一些与我的postBut相关的教程url吗?如何从csv文件还原sms?我如何检查sd卡中的备份sms.cvs文件。在执行上述代码后,我在sd卡中找不到任何csv文件。请帮助我找到查找备份文件。
    public ArrayList<String> smsBuffer = new ArrayList<String>();
    String smsFile = "SMS"+".csv";
       private void  backupSMS(){
    smsBuffer.clear();
    Uri mSmsinboxQueryUri = Uri.parse("content://sms");
    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');

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

}