我正在使用SQLite数据库(300 KB)运送我的Android应用程序,在我阅读之后,我需要移动它以便使用它。在iOS中,您将数据库从应用程序移动到文档文件夹,因为您无法写入应用程序,因为它已签名。这也是Android的原因吗?所以回到我的问题。以下代码不能正确复制数据库,它只复制其中的一部分。为什么这样?我在这里做错了吗。
private final static String DB_NAME = "klb.sqlite";
dbPath = "/data/data/" + context.getPackageName() + "/databases/"; // setting this in constructor
(上面的行是私有成员,适用于下面的两个代码示例)
BufferedInputStream bis = new BufferedInputStream(context.getAssets().open(DB_NAME));
FileOutputStream fos = new FileOutputStream(dbPath + DB_NAME);
while (bis.read() != -1) {
fos.write(bis.read());
}
bis.close();
fos.flush();
fos.close();
然而,这有效:(对不起因为重新缩进而懒惰)
InputStream inputStream = context.getAssets().open("klb.sqlite");
OutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
答案 0 :(得分:5)
while (bis.read() != -1) {
fos.write(bis.read());
}
仔细看看。您拨打read
两次,但write
一次。你实际上正在跳过所有其他字节。