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

Java Scanner读取文本文件返回null,无法生成随机短语求助

搞定Scanner读不到Phrases.txt的问题

嘿,你的代码思路没问题,但Scanner拿不到文件大概率是路径没搞对,或者文件放错地方了。我给你拆解几个排查方向和修复方案:

1. 先确认文件位置是否正确

你用new File("Phrases.txt")的时候,JVM是在程序运行的当前工作目录找文件,不是你放源代码的文件夹哦!

  • 如果你用IDE(比如IntelliJ、Eclipse)跑代码:
    • 直接把Phrases.txt扔到项目根目录(和src文件夹平级的位置),别塞src里。
    • 要是实在搞不清,就打印当前工作目录看看:
      System.out.println("JVM当前找文件的目录:" + System.getProperty("user.dir"));
      
      把文件放到输出的这个路径里绝对能找到。

2. 换更可靠的资源读取方式

如果这个文件是项目的资源文件,推荐用ClassLoader读取,不管是IDE跑还是打成jar包都不会出问题:

public static String phrasePicker() throws IOException {
    // 用类加载器获取资源输入流
    InputStream inputStream = YourClassName.class.getClassLoader().getResourceAsStream("Phrases.txt");
    if (inputStream == null) {
        throw new FileNotFoundException("糟了,找不到Phrases.txt文件!检查下文件位置对不对");
    }
    
    Scanner input = new Scanner(inputStream);
    // 用List代替固定长度数组,不用硬写140,更灵活
    List<String> phrasesList = new ArrayList<>();
    
    while (input.hasNextLine()) {
        phrasesList.add(input.nextLine());
    }
    input.close();
    
    // 加个判断,避免空文件导致的报错
    if (phrasesList.isEmpty()) {
        throw new IllegalStateException("Phrases.txt里啥都没有啊,先加点短语进去吧");
    }
    
    Random random = new Random();
    int select = random.nextInt(phrasesList.size());
    return phrasesList.get(select);
}

记得把YourClassName换成你实际的类名哈。

3. 原代码里的小bug要改

你写的i = i++;是无效的!后置自增i++会先返回i原来的值,再自增,然后你又把原来的值赋值回i,等于i根本没涨。直接改成i++或者i += 1就行。

4. 额外提醒:处理异常和关闭资源

原代码里Scanner没关闭,虽然JVM会自动回收,但最好显式调用input.close(),或者用try-with-resources语法自动关闭资源:

try (Scanner input = new Scanner(new File("Phrases.txt"))) {
    // 你的读取逻辑
}

这样改完应该就能正常读取文件,随机返回短语啦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:26:19