在Android中逐字逐句读取文件的最佳方法是什么

时间:2013-08-02 16:07:31

标签: java android file-io java.util.scanner fileinputstream

我想在我的应用程序中读取文本文件,但我需要逐字逐句而不是逐行阅读。我已经习惯了Java和带有hasNext()方法的Scanner类,所以我目前正在使用它。这是我的代码:

        try
    {
        FileInputStream fis = openFileInput(FILENAME);
        Scanner infile = new Scanner(new InputStreamReader(fis));

        while(infile.hasNext())
        {
            accName = infile.next();
            uName = infile.next();
            pWord = infile.next();

            ((ArrayHandler)getApplicationContext()).info.add(new Information(accName, uName, pWord));

            for( int i = 0; i < ((ArrayHandler)getApplicationContext()).info.size(); i++)
            {

            }
        }
    }
    catch(Exception err)
    {
        Toast.makeText(getBaseContext(), "Could Not Read File", Toast.LENGTH_LONG).show();
    }

如果有更好的方法,请告诉我。此外,在实际使用该应用程序之前,不会创建此文件,因此它将首先抛出错误,然后在发生onDestroy()之后,用户将重新加载它将读取的信息。

修改 对不起,直到现在还没有回应。但上面显示的方法实际上是100%工作。因此,对于那些希望逐字阅读文件并分配它们的人(如上所述),这段代码可以毫无问题地工作。

1 个答案:

答案 0 :(得分:0)

您可以逐行遍历并选取与模式匹配的行(带空格的三个单词):

    Pattern p = Pattern.compile("(\\w+)\\s+(\\w+)\\s+(\\w+)");
    Scanner sc = null;
    try {
        sc = new Scanner(getAssets().open("test.txt"));
        while (sc.hasNextLine()){
            Matcher m  = p.matcher(sc.nextLine());
            if(m.find()){
                Log.i("TESTING","Account:"+m.group(1)+", User:"+m.group(2)+", Password:"+m.group(3));
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }