我想导入一个大于10 MB的数据库。我还没有在互联网上找到解决方案...此外,我想在最终的APK中插入这个数据库。 你有什么想法吗?
抱歉我的英文。我是法国人
答案 0 :(得分:1)
基本上我曾经为类似数据库做过的事情是here所描述的事情。您创建数据库并将其放在assets
文件夹中。然后让SQLiteOpenHelper
将它复制到应用程序数据库应该驻留的位置(即私有应用程序存储)。
然而,对于大文件,我需要按照here所述将数据库文件拆分为多个文件,因为无法从assets
文件夹中读取大于1MB的文件。但是你应该知道你的apk会变得非常大。
答案 1 :(得分:0)
我认为你要么:
答案 2 :(得分:-1)
可以使用ZipInputStream来处理大文件。使用zip util zip压缩项目资产文件夹中的文件
InputStream dataSource = getAssets().open("assets.zip");
unzip(dataSource, MainTab1Activity.defaultDBPath);
public static void unzip(InputStream zipFileName, String outputDirectory) {
try {
ZipInputStream in = new ZipInputStream(zipFileName);
// 获取ZipInputStream中的ZipEntry条目,一个zip文件中可能包含多个ZipEntry,
// 当getNextEntry方法的返回值为null,则代表ZipInputStream中没有下一个ZipEntry,
// 输入流读取完成;
ZipEntry entry = in.getNextEntry();
while (entry != null) {
// 创建以zip包文件名为目录名的根目录
File file = new File(outputDirectory);
file.mkdir();
System.out.println("file.mkdir()");
if (entry.isDirectory()) {
String name = entry.getName();
name = name.substring(0, name.length() - 1);
file = new File(outputDirectory + File.separator + name);
file.mkdir();
} else {
file = new File(outputDirectory + File.separator + entry.getName());
file.createNewFile();
FileOutputStream resultFileOutput = new FileOutputStream(file);
byte[] buf = new byte[1024 * 1024];// 设定缓冲区大小
int bsize = 0;
while ((bsize = in.read(buf)) != -1) {
resultFileOutput.write(buf, 0, bsize);
}
//in.close();
resultFileOutput.close();
System.gc();
// FileOutputStream out = new FileOutputStream(file);
// int b;
// while ((b = in.read()) != -1) {
// out.write(b);
// }
// out.close();
}
// 读取下一个ZipEntry
entry = in.getNextEntry();
}
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}