BufferedReader 没有完全读取文件
BufferedReader not fully reading a file
我有一个 50 行的文件,每行只包含一个单词,我有以下 class 从文件中随机读取一行
public class WordGenerator{
static Random generator;
static int numberGenerator(){
generator = new Random();
return generator.nextInt(50)+1;
}
static String wordSelector(){
String word = null;
FileInputStream fis = null;
BufferedReader br = null;
String temp = String.format("..%sutil%s", File.separator, File.separator);
try{
fis= new FileInputStream(temp + "Words.txt");
br = new BufferedReader(new InputStreamReader(fis));
}catch(FileNotFoundException ex){
System.out.println("File not found: " + ex);
}
try{
for(int i = 0; i < numberGenerator(); ++i){
word = br.readLine();
}
}catch(IOException e){
System.out.println("Error in line reading: " + e);
}
System.out.println(word);
return word;
}
}
问题是,出于某种原因,class 永远不会返回位于前 5-10 行之后的任何内容,而只会返回第一行,知道是什么原因造成的吗?
在此先致谢!
您的循环在每次迭代时调用 numberGenerator()
。这意味着您不是从 1 到 50 中选择一个随机数,而是每次循环都绘制一个新数。
当您完成 5 或 10 次迭代时,您可能已经抽取了一个小于 i 的随机数。
在修复它的同时,将 new Random()
实例移到该方法之外。你只需要一个随机数生成器,你可以在上面一直调用 nextInt()
。您每次都在不必要地创建一个新对象。
我有一个 50 行的文件,每行只包含一个单词,我有以下 class 从文件中随机读取一行
public class WordGenerator{
static Random generator;
static int numberGenerator(){
generator = new Random();
return generator.nextInt(50)+1;
}
static String wordSelector(){
String word = null;
FileInputStream fis = null;
BufferedReader br = null;
String temp = String.format("..%sutil%s", File.separator, File.separator);
try{
fis= new FileInputStream(temp + "Words.txt");
br = new BufferedReader(new InputStreamReader(fis));
}catch(FileNotFoundException ex){
System.out.println("File not found: " + ex);
}
try{
for(int i = 0; i < numberGenerator(); ++i){
word = br.readLine();
}
}catch(IOException e){
System.out.println("Error in line reading: " + e);
}
System.out.println(word);
return word;
}
}
问题是,出于某种原因,class 永远不会返回位于前 5-10 行之后的任何内容,而只会返回第一行,知道是什么原因造成的吗?
在此先致谢!
您的循环在每次迭代时调用 numberGenerator()
。这意味着您不是从 1 到 50 中选择一个随机数,而是每次循环都绘制一个新数。
当您完成 5 或 10 次迭代时,您可能已经抽取了一个小于 i 的随机数。
在修复它的同时,将 new Random()
实例移到该方法之外。你只需要一个随机数生成器,你可以在上面一直调用 nextInt()
。您每次都在不必要地创建一个新对象。