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

Java技术问询:如何用Scanner为FileWriter指定文件名?预定义字符串失效

问题分析与解决:Scanner获取文件名导致FileWriter创建文件失败

首先看你遇到的报错信息:java.io.FileNotFoundException: entries\awdwad .txt (文件名、目录名或卷标语法不正确),结合你后来找到的原因——遗漏分隔符,其实问题出在路径拼接时的格式错误,下面帮你梳理清楚整个问题的来龙去脉和后续的避坑方案:

问题根源拆解

  1. 拼写小失误:你最初的示例代码里Filewriter是小写的w,正确应该是FileWriter(Java类名大小写敏感),不过从堆栈跟踪来看你已经修正了这个问题,不然代码根本编译不过。
  2. 路径/文件名格式非法:报错里的文件名是entries\awdwad .txt,这里的问题大概率是你在拼接目录和文件名时,要么多了一个多余的分隔符,要么少了必要的分隔符,导致系统无法识别正确的文件路径。比如如果原本是想把文件放到entries目录下,但拼接时写成了entriesawdwad.txt(没加分隔符),或者字符串里的\没转义成\\(Windows系统要求),都会触发这个错误。另外文件名末尾的空格也可能导致系统识别异常。

修复与避坑方案

1. 用安全的方式拼接路径

手动写路径分隔符很容易出错,推荐用Java提供的工具类来构建路径,避免手动拼接的问题:

import java.io.*;
import java.util.Scanner;

public class Example{
    public static void main(String[] arg) {
        String title;
        Scanner input = new Scanner(System.in);
        // 去掉输入的首尾空格,避免文件名带多余空格
        title = input.next().trim();
        try {
            // 用File类的构造方法自动处理路径分隔符
            File targetFile = new File("entries", title + ".txt");
            FileWriter fw = new FileWriter(targetFile);
            // 记得用完关闭流,或者用try-with-resources自动关闭
            fw.close();
        } catch (IOException ex) {
            // 不要空catch,打印堆栈信息帮你快速定位问题
            ex.printStackTrace();
        }
        input.close();
    }
}

或者用更现代的NIO Paths类写法:

Path targetPath = Paths.get("entries", title + ".txt");
FileWriter fw = new FileWriter(targetPath.toFile());

2. 校验并清理用户输入的文件名

用户输入的内容可能包含系统不允许的字符(比如Windows下的\ / : * ? " < > |,Linux下的/),可以提前过滤:

title = input.next().trim();
// 过滤掉非法字符,替换成空字符串
title = title.replaceAll("[\\\\/:*?\"<>|]", "");

3. 不要忽略异常处理

空的catch (IOException ex) {}会让你完全看不到错误细节,这也是你一开始找不到问题的原因之一。至少要打印堆栈跟踪,或者给出友好的错误提示。

总结

你找到的“遗漏分隔符”确实是核心问题,本质是路径格式不符合系统要求。用Java提供的路径构建工具类,加上输入内容的校验,就能避免这类问题再次发生啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:17:36