需要一种更好的方法来读取和存储文本文件中的值

时间:2012-08-17 19:29:09

标签: java android text-files inputstream stringtokenizer

目标:从文本文件中获取值并将其存储到值中以加载到我的sqlite数据库中。

问题:我的方法效率不高,我需要帮助提出一种更简单的方法。

到目前为止,我正在解析看起来像这样的文本文件。

agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone
1,"NJ TRANSIT BUS","http://www.njtransit.com/",America/New_York,en,""
2,"NJ TRANSIT RAIL","http://www.njtransit.com/",America/New_York,en,""

我每次读取逗号时都会解析,然后将该值存储到变量中,然后我将该变量用作我的数据库值。

此方法有效并且非常耗时。我必须阅读的下一个文本文件有超过200行代码,我需要找到一种更简单的方法。

AgencyString = readText();
        tv = (TextView) findViewById(R.id.letter);

        tv.setText(readText());

        StringTokenizer st = new StringTokenizer(AgencyString, ",");

        for (int i = 0; i < AgencyArray.length; i++) {
            size = i; // which value i am targeting in the textfile 
//ex. 1 would be agency_id, 2 would be agency_name
            AgencyArray[i] = st.nextToken();
        }
        tv.setText(AgencyArray[size]);  //the value im going to store into database value
    }

    private String readText() {
        InputStream inputStream = getResources().openRawResource(R.raw.agency);

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        int i;
        try {
            i = inputStream.read();
            while (i != -1) {
                byteArrayOutputStream.write(i);
                i = inputStream.read();
            }
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return byteArrayOutputStream.toString();

    }

2 个答案:

答案 0 :(得分:1)

首先,为什么这是一个问题?我不是故意用一个问题回答你的问题,但需要更多的背景来理解你需要以什么方式提高你所做的事情的效率。由于解析了文件,应用程序是否存在感知延迟,或者由于您在UI线程上运行而导致更严重的ANR问题?除非在其他代码中没有显示出一些瓶颈,否则我真的怀疑你是否能够更快地阅读和标记它而不是你现在正在做的事情。嗯,实际上,毫无疑问你可能;但是,我认为这更像是设计应用程序的情况,因此获取和解析大数据所涉及的延迟不会被用户察觉或引起用户的烦恼。我自己的应用程序解析像这样的大量文件,它只需要几分之一秒,但由于整个应用程序和UI的设计,它不会出现问题。另外,您是否使用了分析器来查看需要花费时间的内容?还有,你是否在真正的设备上运行它,没有连接调试器?将调试器连接到真实设备或使用模拟器会大大增加执行时间几个订单。

我假设您需要在通过网络接收后解析此文件类型,而不是与应用程序捆绑在一起并且只需解析一次。

答案 1 :(得分:0)

您可以将SQLite数据库与应用程序捆绑在一起,而不是将其表示在文本文件中。看看this question

的答案