Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要从文本文件中读取和存储值的更好方法吗_Java_Android_Text Files_Inputstream_Stringtokenizer - Fatal编程技术网

Java 需要从文本文件中读取和存储值的更好方法吗

Java 需要从文本文件中读取和存储值的更好方法吗,java,android,text-files,inputstream,stringtokenizer,Java,Android,Text Files,Inputstream,Stringtokenizer,目标:从文本文件中获取值并将其存储到值中以加载到我的sqlite数据库中 问题:我的方法效率不高,我需要帮助找到一种更简单的方法 AgencyString = readText(); tv = (TextView) findViewById(R.id.letter); tv.setText(readText()); StringTokenizer st = new StringTokenizer(AgencyString, ",");

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

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

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();

    }
现在我正在解析我的文本文件,看起来像这样

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();

    }
AgencyString=readText();
tv=(文本视图)findViewById(R.id.letter);
tv.setText(readText());
StringTokenizer st=新的StringTokenizer(AgencyString,“,”);
for(int i=0;i
您可以将SQLite数据库与应用程序捆绑在一起,而不是在文本文件中表示它。首先看一下

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


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

我应该把我的问题说得更清楚些。我需要提高效率,不一定是通过文件解析的速度,而是通过编码的方式。以我的名义,在一个包含200多行代码的文本文件中使用这种方法,提取数据并将其存储到变量中需要很长时间。我想知道是否有其他方法可以编写此代码,这可以使我的工作更轻松一些。仅处理200行,甚至每个字段50个,应该不到一秒钟。我想我可以做的是将所有GTFS文本文件转换为数据库表。然后只需查询那些表。。