我想导入一个大于 10 MB 的数据库。我还没有在互联网上找到解决方案......此外,我想将此数据库插入最终的 APK 中。你有什么想法 ?
对不起我的英语不好。我是法国人
我认为您要么必须:
可以使用 ZipInputStream 处理大文件。使用 zip util 将文件压缩到项目的资产文件夹中
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();
}
}