如何从下载文件夹导入数据库

时间:2016-02-14 23:59:48

标签: android sqlite import

    public void copyDbToInternalFolder() throws IOException {

        String DB_PATH = Environment.getDataDirectory().getPath()+getPackageName()+"/Databases/"; // Don't worry I know this line doesn't work, however, nothing was working
        String DB_NAME = "Client_Responses.db";


        InputStream myInput = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS,"Client_Responses.db"); //needs to get database file from Downloads folder
        String outFileName = DB_PATH + DB_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }

        myOutput.flush();
        myOutput.close();
        myInput.close();


    }

我已经编写了几个相关应用程序,可以在设备下载文件夹中创建sqlite数据库文件。我需要坚持这种方法,以支持一路回到第一代平板电脑。 API 8本质上。

现在,管理员需要从“下载”文件夹中导入找到的文件,然后将其导入到自己的数据库文件夹中。

上面的代码不起作用,空指针异常和错误的文件名/路径名创建错误,应用程序将强制退出,我已经尝试了似乎所有的东西。我的想法现在已成为瓶颈。

我一直在努力解决这个问题并欢迎投入。

注意:我很可能会复制不同类文件中的代码,每个文件都复制一个不同的数据库名称。

1 个答案:

答案 0 :(得分:0)

private void copyDbToInternalFolder() throws IOException {

    String ToDB_PATH = "/data/data/"+this.getPackageName()+"/databases/";

    String sourcePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/Client_Responses.db";
    File source = new File(sourcePath);

    String destinationPath = ToDB_PATH + "/" + DB_NAME;
    File destination = new File(destinationPath);
    try
    {
        FileUtils.copyFile(source, destination);
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

这似乎适用于Android4.2.2平板电脑,但不适用于模拟器。我无法确定问题是模拟器以及它如何处理路径创建,或者它的API8是否无法理解它们。如果有人有任何建议,我将不胜感激。所以问题只是部分回答。