使用BufferedReader从文本文件中的特定行获取数据

时间:2015-10-26 15:06:30

标签: java android eclipse text-files

我目前正在构建一个从项目内的文本文件中提取值的应用程序。以某种方式管理从特定行提取数据,但似乎没有得到正确的。

以下是代码:

 private String getInputsFromATextFile(int item) throws FileNotFoundException {         
    InputStream is = this.getResources().openRawResource(R.drawable.input);
    StringBuilder builder = new StringBuilder();
    int lineNo = 0;
    try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;            
        while((line = reader.readLine()) != null){
            lineNo++;
            if(lineNo == item){
                builder.append(reader.readLine());
            }

        }
        reader.close();
    }
    catch (IOException e){
        e.printStackTrace();
    }   
    return builder.toString();
}

以下是文本文件内容:

20.45
21.65
1
225
4102
401
3
3
6
1
196.41
64.11
7
3
5
2
144.01
3
452.33
12
701.33
33
78.12
12
123.90
4
25.00
10
6.51
30.98
2.50
Spiderman
100.00
90
150.00
100
10
34
12
James
1267
Joshue
401
Christelle
3050
Ryan
888
Hanna
5
13
24
9
5
3
50

假设我们在参数中指定了某个行号。此方法返回分配行号的确切下一个数据。虽然,也许我可以调整它总是返回的输出(lineNo + 1),但如果我在参数中指定了'0'(零),它将返回null。为什么会这样?我必须遗漏一些非常重要的东西。

2 个答案:

答案 0 :(得分:1)

那是因为你在声明builder.append(reader.readLine())中再次阅读该行。 请注意,您已经在while循环中阅读了它。

所以,正确的陈述是: builder.append(line);

答案 1 :(得分:0)

附加时请勿再次阅读。使用:

builder.append(line);

此外,如果您希望将其0编入索引,则应在比较后增加lineno

if(lineno == item)
{
}
lineno ++;

如果你在比较之前这样做,它永远不会是0,因此会返回null

这是最佳的吗? 如果它只是一次退休是的。

如果你反复使用它 - 不,每当你想要来自该行的数据时,你需要遍历整个文件直到该行。

您可以做的一种方法是将其存储在ArrayList中。

 InputStream is = this.getResources().openRawResource(R.drawable.input);
 ArrayList<String> list = new ArrayList();
    try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;            
        while((line = reader.readLine()) != null){
           list.add(line);
        }
        reader.close();
    }
    catch (IOException e){
        e.printStackTrace();
    }   
getLineFromFile(list, 10);

将所有字符串存储在arrayList中,然后检索它们。

public String getLineFromFile(ArrayList<String> list, int lineNo);
{
 return list.get(lineNo - 1);
}