我正在尝试制作一个从文件中随机获取一行的程序,我已经完成了我的代码,但我得到了奇怪的结果,例如,如果我得到第 0 行,它说"null"与第 6、7、8、9 行相同......但是当我得到数字 5 时,我得到最后一行(粉红色),当我得到数字 4 时,我得到第 7 行(棕色), 2号线3(海军)等等。我的文件"archivo.txt"有10行,如下所示:
- 红
- 橙
- 蓝
- 海军
- 石灰
- 绿
- 橄榄
- 棕色
- 黄色
- 粉红色
这是我的代码:
public static String getLinea(){
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
String linea = null;
int numeroRandom = (int)(Math.random() * 10);
System.out.println(numeroRandom);
try{
archivo = new File("C:\archivo.txt");
fr = new FileReader (archivo);
br = new BufferedReader(fr);
for(int i = 0; i < numeroRandom; i++){
br.readLine();
linea = br.readLine();
}
}
catch(Exception e){
e.printStackTrace();
}finally{
try{
if(null != fr){
fr.close();
}
}catch(Exception e2){
e2.printStackTrace();
}
}
return linea;
}
public static void main(String[] args){
String linea;
linea = getLinea();
System.out.println(linea);
}
您正在尝试按顺序从缓冲区读取两次。
for(int i = 0; i < numeroRandom; i++){
br.readLine();
linea = br.readLine();
}
而是只读一次。正确方法:
for(int i = 0; i < numeroRandom; i++){
linea = br.readLine();
}
此外,在从缓冲读取器读取之前,您应该检查 BufferedReader 是否还有更多数据。这可以按如下方式完成:
while(((linea = br.readLine()) != null) && i < numeroRandom)
{
// do something
}
你在循环中调用 readLine() 两次,有效地使你跳过的行数翻了一番。
我假设您只想阅读第 n 行,跳过前面的行。然后你应该更新这段代码:
br = new BufferedReader(fr);
for(int i = 0; i < numeroRandom; i++){
br.readLine();
linea = br.readLine();
}
进入这个:
br = new BufferedReader(fr);
for(int i = 0; i < numeroRandom; i++){
br.readLine();
}
linea = br.readLine(); // move this line
当numeroRandom
为 0 时,您会null
,因为linea
没有更新。其他奇怪的结果是因为您在每个周期中读取 2 行。在某一点上,getLine()
将简单地返回 null,因为没有更多要读取的行。