2012-07-23 47 views
1

我应该把保存在手机sd卡上的txt文件放在Android的数据库SQLite中,但我不知道该怎么做,帮帮我,我慷慨地写了几行代码来做到这一点?在数据库SQLite(for Android)中添加一个txt文件,怎么样?

+0

什么目的做u需要它?数据是表格格式吗? – chaitanya 2012-07-23 21:57:16

+0

txt是一个包含无序(不能用逗号分隔)的表格数据的文件。我会理解是否有一种简单的方法可以从txt SD卡中删除此文件并将其插入到表格的一行中!没有太多复杂的东西,比如JPG图片! – user1547027 2012-07-23 22:03:11

+0

按照这个确切的教程,并告诉我们,如果/当你卡住http://www.vogella.com/articles/AndroidSQLite/article。html – 2012-07-23 22:44:27

回答

1

File转换为byte[],然后将其作为BLOB数据添加到sqlite中。也许你应该将它们转换为Base64格式来优化空间,你应该没问题。

正如你所看到的,实现类似这样的事情有多个步骤,所以我只是添加了总体概述。如果您遇到困难,请询问更多细节。编号: 我将提供关键点的代码。

用于转换文件为byte []使用这个片段:

InputStream is = new FileInputStream(file); // where file is the .txt you want to convert 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] b = new byte[1024]; 
while ((int bytesRead = is.read(b)) != -1) { 
    bos.write(b, 0, bytesRead); 
} 
byte[] bytes = bos.toByteArray(); 

转换字节[]为Base64字符串:

String dataToSave = Base64.encodeToString(bytes, Base64.DEFAULT); 

OR

byte[] dataToSave = Base64.encode(bytes, Base64.DEFAULT); 

虽然你必须有最低版本2.2支持base 64编码。

如果您选择了第一个实现,那么sqlite表中的任何TEXT字段就足够了,否则在您的表中创建一个与BLOB类似的列。在创建要插入的ContentValues时,请添加values.put(KEY, dataToSave);

获取数据:

做反向操作:1)得到sqlite的数据,2)转换为byte [],3)转换为文件。

转换byte[]File

FileOutputStream out = new FileOutputStream(path); //file path as string 
out.write(data); //data is the byte[] 
out.flush(); 
out.close(); 
+0

在我看来,你的方法很有意思,你可以写几行代码来说明怎么做?谢谢! – user1547027 2012-07-24 04:45:28

+0

我编辑了我的答案 – 10s 2012-07-24 09:59:08

+0

非常好,你会如此友善地插入代码将文件字节转换为txt文件,反向操作?再次感谢! – user1547027 2012-07-24 10:50:04

0

如果文本文件包含数据行。例如,

<ISBN>, <Title>, <Author>, <Price> 

然后,您应该将此存储为sqLite中的表。为什么?因为无论如何SQLIte实际上是一个文件数据库,并且一旦您在SQLite中存储为表格,您就可以使用SQLite的强大功能以各种方式查询数据。添加删除行等。

按照这里的步骤,并告诉我们你卡在哪里。 http://www.vogella.com/articles/AndroidSQLite/article.html

如果您只是想简单地保存文本的值,您应该将其读入String并使用SharePreferences保存String。

无论如何,第1步是从SD卡读取文件。

相关问题