我需要从1个.txt文件中检索两行并将它们输出到对话框中。我现在的代码是
private String getfirstItem() {
String info = "";
File details = new File(myFile);
if(!details.exists()){
try {
details.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedReader read = null;
try {
read = new BufferedReader (new FileReader(myFile));
} catch (FileNotFoundException e3) {
e3.printStackTrace();
}
for (int i = baseStartLine; i < baseStartLine + 1; i++) {
try {
info = read.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
firstItem = info;
try {
read.close();
} catch (IOException e3) {
e3.printStackTrace();
}
return firstItem;
}
private String getsecondItem() {
File details = new File(myFile);
String info = "";
BufferedReader reader = null;
if(!details.exists()){
try {
details.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}}
try {
reader = new BufferedReader (new FileReader(myFile));
} catch (FileNotFoundException e3) {
e3.printStackTrace();
}
for (int i = modelStartLine; i < modelStartLine + 1; i++) {
try {
info= reader.readLine();
} catch (IOException e) {
e.printStackTrace();}
modelName = info;} try {
reader.close();
} catch (IOException e3) {
e3.printStackTrace();
}
return secondItem;
}
然而,我两个都持续获得相同的价值? modelStartLine = 1,baseStartLine = 2
答案 0 :(得分:2)
你实际上从未跳过任何行。您从不同的数字开始循环索引,但您仍然只从文件的开头循环一次。你的循环应该是这样的:
public string readNthLine(string fileName, int lineNumber) {
// Omitted: try/catch blocks and error checking in general
// Open the file for reading etc.
...
// Skip the first lineNumber - 1 lines
for (int i = 0; i < lineNumber - 1; i++) {
reader.readLine();
}
// The next line to be read is the desired line
String retLine = reader.readLine();
return retLine;
}
现在您可以像这样调用函数:
String firstItem = readNthLine(fileName, 1);
String secondItem = readNthLine(fileName, 2);
然而。由于您只需要文件的前两行,您最初可以读取它们:
// Open the file and then...
String firstItem = reader.readLine();
String secondItem = reader.readLine();
答案 1 :(得分:0)
这是对的。您只能以两种方式读取文件的第一行。当您创建一个新的Reader并使用readLine()方法读取一行时,阅读器将返回该文件的第一行。无论你的for循环中的数字如何。
for(int i = 0; i <= modelStartLine; i++) {
if(i == modelStartLine) {
info = reader.readLine();
} else {
reader.readLine();
}
}
这是一行阅读的简单解决方案。
对于第一行,您不需要for循环。您可以创建阅读器并调用readLine()方法。这将返回第一行。