我正在尝试制作一个从文件中随机获取一行的程序,我已经完成了我的代码,但是我得到了奇怪的结果,例如,如果我得到第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);
}
答案 0 :(得分:2)
您正尝试按顺序从缓冲区读取两次。
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
}
答案 1 :(得分:1)
你在循环中调用readLine()两次,有效地使你跳过的行数加倍。
答案 2 :(得分:1)
我假设您只想读取第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
当null
为0时,您收到numeroRandom
,因为linea
未更新。其他奇怪的结果发生是因为你在每个循环中读了2行。有一个点getLine()
只会因没有更多的行而返回null。