BufferedReader没有完全读取文件

时间:2016-05-24 04:16:05

标签: java bufferedreader fileinputstream

我有一个包含50行的文件,每行只包含一个单词,我有以下类从文件中读取随机行

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;
    }
}

问题在于,由于某种原因,该类永远不会返回位于前5-10行之后的任何内容,只是不断返回第一行,是否有任何可能导致此问题的想法?

先谢谢!

1 个答案:

答案 0 :(得分:2)

你的循环在每次迭代时调用numberGenerator()。这意味着,不是从1到50中选择一个随机数,而是每次循环都会绘制一个新的随机数。

当你经历5次或10次迭代时,你可能会得到一个小于i的随机数。

在修复此问题时,请将new Random()实例移到该方法之外。您只需要一个随机数生成器,您可以继续调用nextInt()。你每次都在不必要地创建一个新对象。