【问题标题】:FileReader "eats" each first letterFileReader “吃掉”每个首字母
【发布时间】:2020-12-18 21:44:59
【问题描述】:

我有一个代码:

File readFile = new File("acc\\10001.txt");
protected void readData(File file){

    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        while(reader.read() != -1){
            System.out.println(reader.readLine());
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

方法在 Main 类的构造函数中。启动项目时,控制台显示(例如):“est”而不是“Test”,“0001”而不是“10001”。

它适用于所有字符串和整数。

感谢每一个帮助。

【问题讨论】:

  • 不,(reader.read() != -1)“吃掉”一个字符。摆脱它并使用 readLine() 直到它返回 null。
  • 当我使用while(reader.readLine() == null) 时,控制台不返回任何字符/数字,当我使用while(reader.readLine() != null) 时,控制台仅返回文件中包含的 10 行中的 5 行
  • readLine() 的结果存储在变量中,并在循环条件和循环体中使用该变量。你可以写成String line = null; while ( (line = reader.readLine()) != null){ .. handle current line..}
  • 或者使用像Scanner这样的类,它在内部缓存通过has..XYZ..()读取的值,以后可以通过nextLine()等方法检索。这样你的代码可以看起来像Scanner scanner = new Scanner(new File(pathToFile)); while(scanner.hasNextLine()){ String line = scanner.nextLine(); ..handle current line.. }
  • @Pshemo 感谢兄弟的解决 :)

标签: java io bufferedreader filereader java-io


【解决方案1】:

你的sn-p:

while(reader.read() != -1){
    System.out.println(reader.readLine());
}

每次评估 while 条件时读取一个字符(read() 被调用,it reads next character

用更好的方法改变你的代码:

String line="";
while ((line=reader.readLine()) != null) { //variable line gets assigned with value and then it's checked against null
    System.out.println(line);
}

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2015-01-25
    • 2021-11-02
    • 2012-11-25
    • 1970-01-01
    • 2011-02-28
    • 2016-12-05
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多