You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用FileReader判断文件为空时方法未定义问题求解

问题根因

  • 调用length()报错是因为FileReader类本身未定义该方法,该方法属于java.io.File类,用于获取文件的字节长度。
  • 空文件判断逻辑写在while (myFile.hasNext())循环内永远不可能执行:空文件时hasNext()会直接返回false,循环体不会触发。

修正方案

提前通过File类判断文件是否为空,将判断逻辑移到循环外部,修正后代码如下:

import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.util.Scanner;
// 你的其他相关import

// 假设landings集合已提前初始化
List<Landing> landings = new ArrayList<>();
File dataFile = new File("LandingsData.txt");
FileReader fr = null;

try {
    // 先判断文件是否为空
    if (dataFile.length() == 0) {
        System.out.println("Starting with an empty system");
        return; // 无需继续执行后续读取逻辑
    }
    fr = new FileReader(dataFile);
} catch (FileNotFoundException e) {
    System.out.println("File not found");
    return;
}

Scanner myFile = new Scanner(fr);
myFile.useDelimiter(",|\n");
while (myFile.hasNext()) {
    String line = myFile.next();
    if (line.equals("sl")) {
        StrongLanding sl = new StrongLanding();
        sl.setLandingId(Integer.parseInt(myFile.next()));
        sl.setLandingDesc(myFile.next());
        sl.setNumLandings(Integer.parseInt(myFile.next()));
        sl.setCost(Double.parseDouble(myFile.next()));
        landings.add(sl);
    } else if (line.equals("ul")) {
        UltimateLanding ul = new UltimateLanding();
        ul.setLandingId(Integer.parseInt(myFile.next()));
        ul.setLandingDesc(myFile.next());
        ul.setNumLandings(Integer.parseInt(myFile.next()));
        ul.setCost(Double.parseDouble(myFile.next()));
        landings.add(ul);
    }
}
// 读取结束后关闭流避免资源泄漏
myFile.close();
try {
    fr.close();
} catch (IOException e) {
    e.printStackTrace();
}

补充说明

如果需要兼容「文件有内容但全是空白字符、无有效业务数据」的场景,可以去掉提前判断文件长度的逻辑,在循环结束后判断landings集合是否为空即可:

// 循环读取逻辑结束后新增
if (landings.isEmpty()) {
    System.out.println("Starting with an empty system");
}

内容的提问来源于stack exchange,提问作者JakeStillone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:30:03