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

文件无法复制报错:路径含非法字符<,回车触发失效但鼠标点击正常

问题解决思路及方案

核心原因分析

报错「Illegal char < at index 14: Levels\default」明确指向路径字符串中包含非法字符<,相同逻辑在鼠标事件中正常,说明问题出在回车触发时的路径变量取值或拼接逻辑上——大概率是panel.levelRename在回车场景下被赋值了包含<的非法内容,或是路径拼接时出现异常。

具体解决步骤

1. 定位非法字符来源

在回车事件代码块中添加路径打印语句,明确触发错误的具体路径:

case KeyEvent.VK_ENTER -> {
    String sourcePath = panel.level[panel.levelPage].levelPath;
    String destPath = panel.path + panel.levelRename;
    // 打印路径排查问题
    System.out.println("源路径:" + sourcePath);
    System.out.println("目标路径:" + destPath);
    
    if (new File(sourcePath).exists()) {
       copyFile(new File(sourcePath), new File(destPath));
       // 后续删除代码...
    }
}

运行后查看控制台输出,确认是源路径还是目标路径包含<,重点关注panel.levelRename的内容。

2. 修复路径拼接逻辑

不要直接用字符串拼接路径,改用File的多参数构造方法,它会自动处理系统路径分隔符,避免拼接错误:

// 替换原路径拼接方式
File destFile = new File(panel.path, panel.levelRename);

3. 过滤文件名中的非法字符

Windows系统下文件名禁止包含\/:*?"<>|这些字符,添加工具方法过滤非法内容:

private static String filterInvalidFileName(String fileName) {
    // 匹配所有Windows文件名非法字符
    String invalidPattern = "[\\\\/:*?\"<>|]";
    // 用下划线替换非法字符
    return fileName.replaceAll(invalidPattern, "_");
}

在回车事件中使用过滤后的文件名:

case KeyEvent.VK_ENTER -> {
    String sourcePath = panel.level[panel.levelPage].levelPath;
    // 过滤非法字符
    String validRename = filterInvalidFileName(panel.levelRename);
    File destFile = new File(panel.path, validRename);
    
    if (new File(sourcePath).exists()) {
       copyFile(new File(sourcePath), destFile);
       try {
          Files.delete(Paths.get(sourcePath));
       } catch (IOException ex) {
          ex.printStackTrace();
       }
   }
}

4. 检查回车事件的输入逻辑

如果panel.levelRename来自输入框,确认回车触发时是否直接读取了用户未过滤的输入(比如用户输入了<),需要在输入框内容变更或回车事件中提前做过滤,避免非法字符流入变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:45:26