如何将数据库从资产复制到外部存储?

时间:2014-11-11 17:20:04

标签: android

我想复制一个数据库  从assets文件夹到我的手机存储卡。 程序运行时.. 该计划停止..

此消息显示在logCat中: 显示java.lang.NullPointerException ... 我很困惑.. 我不知道问题是什么 资产文件夹  有一个名为" home.db"的文件。 请帮帮我..

public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    File f1=new File(Environment.getExternalStorageDirectory(),"aaa");
    f1.mkdir();

    InputStream in = null;
    try {
        Toast.makeText(getBaseContext(), "error", Toast.LENGTH_LONG).show();
        in = getBaseContext().getAssets().open("home");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Toast.makeText(getBaseContext(), "error", Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
    OutputStream ou = null;
    try {
        ou = new FileOutputStream(Environment.getExternalStorageDirectory()+"aaa"+ "/"+"home" );
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        CopyDB(in, ou);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void CopyDB(InputStream in, OutputStream ou) throws IOException
{
    byte []buffer=new byte[1024];
    int length;
    while((length=in.read(buffer))>0)
    {
        try {
            ou.write(buffer, 0, length);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
    in.close();
    ou.close();


}

}

2 个答案:

答案 0 :(得分:0)

  

有一个名为“home.db”的文件

然而你正在做

in = getBaseContext().getAssets().open("home");

因为捕获了IOException,所以in保持为null。

试试这个:

in = getBaseContext().getAssets().open("home.db");

答案 1 :(得分:-1)

我希望这对你有所帮助 另外不要忘记给予许可 - - accesssexternal storage