【问题标题】:BufferedReader not fully reading a fileBufferedReader 未完全读取文件
【发布时间】:2016-05-24 04:16:05
【问题描述】:

我有一个 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 行之后的任何内容,而只是不断返回第一行,您知道是什么原因造成的吗?

提前致谢!

【问题讨论】:

    标签: java bufferedreader fileinputstream


    【解决方案1】:

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

    当您完成 5 或 10 次迭代时,很可能您已经绘制了一个小于 i 的随机数。

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

    【讨论】:

    • 天哪,我不敢相信我监督了这一点,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多