目标:从文本文件中获取值并将其存储为值以加载到我的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();

    }

最佳答案

首先,为什么这是一个问题?我并不是要用一个问题来回答您的问题,但是需要更多的上下文来理解您需要以何种方式提高工作效率。由于文件的解析,应用程序中是否存在明显的延迟,或者由于您在UI线程上运行而导致更严重的ANR问题吗?除非未显示其他代码中的某些瓶颈,否则老实说,我怀疑您会以目前的速度更快地阅读并标记它。好吧,实际上,毫无疑问您可以做到;但是,我认为这是设计应用程序的一种情况,这样,大数据的获取和解析所涉及的延迟就不会被用户感知或引起用户的不适。我自己的应用程序会像这样解析大量文件,并且只需花费一秒钟的时间,但是由于整个应用程序和UI的设计,它不会出现问题。另外,您是否使用了探查器来查看时间?而且,您是否在没有调试器的情况下在真实设备上运行此程序?将调试器连接到实际设备上或使用模拟器会大大增加执行时间几倍。

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

10-07 18:55
查看更多