我目前正在构建一个从项目内的文本文件中提取值的应用程序。以某种方式管理从特定行提取数据,但似乎没有得到正确的。
以下是代码:
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。为什么会这样?我必须遗漏一些非常重要的东西。
答案 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);
}