【问题标题】:Need a better method of reading and storing values from text file需要一种更好的方法来从文本文件中读取和存储值
【发布时间】:2012-08-17 19:29:08
【问题描述】:

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

    }

【问题讨论】:

    标签: java android text-files inputstream stringtokenizer


    【解决方案1】:

    首先,为什么会出现这个问题?我并不是说要用一个问题来回答你的问题,而是需要更多的上下文来理解你需要以什么方式来提高你正在做的事情的效率。是否由于文件解析而导致应用程序出现延迟,或者由于您在 UI 线程上运行而导致更严重的 ANR 问题?除非在未显示的其他代码中存在一些瓶颈,否则我真的怀疑您是否会比目前正在做的更快地阅读和标记它。好吧,实际上,毫无疑问,您可能可以;但是,我相信这更像是设计应用程序的一种情况,以便用户不会察觉到大数据的获取和解析所涉及的延迟或对用户造成刺激。我自己的应用程序解析像这样的大量文件,它确实需要几分之一秒,但由于整个应用程序和 UI 的设计,它不会出现问题。另外,您是否使用分析器查看需要时间的内容?而且,您是否在没有附加调试器的情况下在真实设备上运行它?将调试器连接到真实设备或使用模拟器会大大增加执行时间几个数量级。

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

    【讨论】:

    • 我应该更好地表达我的问题。我需要提高效率,不一定是通过文件解析的速度,而是通过我编码的方式。以我的名义,对包含 200 多行代码的文本文件使用此方法,提取数据并将其存储到变量中将需要很长时间。我想知道是否有另一种方法可以编写代码,这可以使我的工作更轻松。
    • 仅处理 200 行,每行甚至 50 个字段,应该花费不到一秒的时间。
    【解决方案2】:

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

    【讨论】:

    • 我想我能做的就是将所有 GTFS 文本文件转换为数据库表。然后只需查询这些表..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多