读取文本文件数据库并显示结果

时间:2012-01-17 16:03:58

标签: android xml database parsing text-files

我有一个以文本文件形式存在的数据库,我的工作是解析txt文件并在listview中显示数据。我不知道从哪里开始。

下面是一个示例条目。 " | 9251115 |,| 0 |,| DETAILS |,||,||,|标题价格文字文字|,||,||

每个||代表一个领域。标题价格和文本(p,b)之间也有html标签

我的第一个想法是将其解析为类似于xml文档,即让它创建一个以#34; |"开头的新行,用中间的所有内容填充它并在结束时结束行它到达下一个" |"。但我仍然没有具体的想法如何做到这一点。

编辑:

现在一步一步。使用stringtokenizer逐行读取并删除","作为一个开始。遇到问题,显示结果的textview由于某种原因而不是扫描文本显示为false。如果有人需要一位优秀的校长,我的代码就在这里。

上下文myContext;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView t = (TextView) findViewById(R.id.text);
    st = new ArrayList<property>();

    try
    {
         InputStream is;
         is = myContext.getAssets().open("rooms.txt");
         BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
         String read = br.readLine();
         while( read != null)
         {
             StringTokenizer st = new StringTokenizer(read,",");
             {
                 while(st.hasMoreTokens())
                 {
                     String a = st.nextToken();
                     String b = st.nextToken();
                     String c = st.nextToken();
                     String d = st.nextToken();
                     String e = st.nextToken();
                     String f = st.nextToken();
                     String g = st.nextToken();
                     String h = st.nextToken();
                     t.setText(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h);
                 }
             }
         }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

3 个答案:

答案 0 :(得分:0)

虽然您绝对可以使用纯Java代码实现自己的解析器,但您应该考虑使用SQLite数据库(1)来存储数据,这样您就可以更轻松地插入,删除,修改和查询。

如果数据库来自外部源的格式,我会编写一个解析数据并将其插入SQLite数据库以供将来使用的一次性解析器。

请记住,Android设备上的CPU比普通PC CPU慢,因此如果您一直在以这种格式解析大量数据,那么您的应用可能会变得非常慢。因此我建议将其转换为数据库。

在这种情况下,您拥有的另一个选项是使用XML,就像您说的那样,因为那里有现成的解析器。但是关于性能的建议依然存在:你应该真的避免一直重新解析数据,而是将它存储在一个随时可用的格式中。

(1):http://developer.android.com/reference/android/database/sqlite/package-summary.html

答案 1 :(得分:0)

我将如何做,

Have an object with getter/setter
Have a list intialized
1) You  need to use StreamReaders/Bufferedreader to read the file 
2) If each is not empty
  2a) Use StringTokenizer to parse the string with "," as delimiter
  2b) Set tokenized values to object
  2c) Add object to list
3) return the list created in above step.

注意:如果在读取整个文件时需要注意大数据,则可能会出现OutofMemoryError。

答案 2 :(得分:0)

布鲁诺奥利维拉提出了非常好的建议。

您可以通过逐行读取来解析文件,然后使用string.split方法,结果您将所有数据放在一个数组中,您可以轻松读取并放入列表视图或将其移动到一个sqlite数据库。