2015-11-11 回答
可以将xx.db文件复制到eclipse android工程中的res\raw目录中。所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。
使用opendatabase方法来打开数据库文件,如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res\raw目录中的 xx.db文件复制到/sdcard/dictionary目录中。opendatabase方法的实现代码如下:这里以dictionary.db为例
[java] view plaincopyprint?
01.private sqlitedatabase opendatabase()
02. {
03. try
04. {
05. // 获得dictionary.db文件的绝对路径
06. string databasefilename = database_path + "/" + database_filename;
07. file dir = new file(database_path);
08. // 如果/sdcard/dictionary目录中存在,创建这个目录
09. if (!dir.exists())
10. dir.mkdir();
11. // 如果在/sdcard/dictionary目录中不存在
12. // dictionary.db文件,则从res\raw目录中复制这个文件到
13. // sd卡的目录(/sdcard/dictionary)
1... 可以将xx.db文件复制到eclipse android工程中的res\raw目录中。所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。
使用opendatabase方法来打开数据库文件,如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res\raw目录中的 xx.db文件复制到/sdcard/dictionary目录中。opendatabase方法的实现代码如下:这里以dictionary.db为例
[java] view plaincopyprint?
01.private sqlitedatabase opendatabase()
02. {
03. try
04. {
05. // 获得dictionary.db文件的绝对路径
06. string databasefilename = database_path + "/" + database_filename;
07. file dir = new file(database_path);
08. // 如果/sdcard/dictionary目录中存在,创建这个目录
09. if (!dir.exists())
10. dir.mkdir();
11. // 如果在/sdcard/dictionary目录中不存在
12. // dictionary.db文件,则从res\raw目录中复制这个文件到
13. // sd卡的目录(/sdcard/dictionary)
14. if (!(new file(databasefilename)).exists())
15. {
16. // 获得封装dictionary.db文件的inputstream对象
17. inputstream is = getresources().openrawresource(r.raw.dictionary);
18. fileoutputstream fos = new fileoutputstream(databasefilename);
19. byte[] buffer = new byte[8192];
20. int count = 0;
21. // 开始复制dictionary.db文件
22. while ((count = is.read(buffer)) > 0)
23. {
24. fos.write(buffer, 0, count);
25. }
26.
27. fos.close();
28. is.close();
29. }
30. // 打开/sdcard/dictionary目录中的dictionary.db文件
31. sqlitedatabase database = sqlitedatabase.openorcreatedatabase(
32. databasefilename, null);
33. return database;
34. }
35. catch (exception e)
36. {
37. }
38. return null;
39. }
private sqlitedatabase opendatabase()
{
try
{
// 获得dictionary.db文件的绝对路径
string databasefilename = database_path + "/" + database_filename;
file dir = new file(database_path);
// 如果/sdcard/dictionary目录中存在,创建这个目录
if (!dir.exists())
dir.mkdir();
// 如果在/sdcard/dictionary目录中不存在
// dictionary.db文件,则从res\raw目录中复制这个文件到
// sd卡的目录(/sdcard/dictionary)
if (!(new file(databasefilename)).exists())
{
// 获得封装dictionary.db文件的inputstream对象
inputstream is = getresources().openrawresource(r.raw.dictionary);
fileoutputstream fos = new fileoutputstream(databasefilename);
byte[] buffer = new byte[8192];
int count = 0;
// 开始复制dictionary.db文件
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
// 打开/sdcard/dictionary目录中的dictionary.db文件
sqlitedatabase database = sqlitedatabase.openorcreatedatabase(
databasefilename, null);
return database;
}
catch (exception e)
{
}
return null;
}
在opendatabase方法中使用了几个常量,这些常量是在程序的主类(main)中定义的,代码如下:
[java] view plaincopyprint?
01.public class main extends activity implements onclicklistener, textwatcher
02.{
03. private final string database_path = android.os.environment
04. .getexternalstoragedirectory().getabsolutepath()
05. + "/dictionary";
06. private final string database_filename = "dictionary.db";
07.}