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

Get data from a specific line in text file using BufferedReader

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

代码如下:

 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

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

那是因为您正在再次阅读语句 builder.append(reader.readLine()) 中的行。 请注意,您已经在 while 循环中阅读了它。

所以,正确的说法是: builder.append(line);

追加时不要重复阅读。使用 :

builder.append(line);

此外,如果你想让它被0索引,你应该在比较之后增加lineno

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

如果你在比较之前做它,它永远不会是 0 因此 returns 一个 null .


这是最优的吗? 如果只是一次性退休 Yes.

如果你一次又一次地使用它 - 不,每次你想要从该行获取数据,你需要遍历整个文件直到该行。

一种方法是将其存储在 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);
}