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

Java自定义Fraction类序列化时报java.io.FileNotFoundException的解决方法

Java序列化Fraction对象抛出FileNotFoundException异常解决方案

该异常是文件创建/写入失败导致,结合你给出的代码,可按以下步骤排查解决:

  • 替换文件名中的非法字符
    你当前代码中的文件名仍保留了模板占位符"<your name>Fractions.dat",其中的<、>是绝大多数操作系统禁止使用的文件名字符,直接使用会导致文件创建失败。将占位符替换为不含特殊字符的真实名称即可,例如改为"liMingFractions.dat"。
  • 检查写入路径权限
    如果文件路径指向系统受保护目录(如Windows的C盘根目录、Program Files目录,macOS/Linux的根目录、系统目录),当前运行的Java程序没有写入权限也会触发该异常。建议指定为有权限的路径,比如直接写桌面的绝对路径:
    Windows示例:String fileName = "C:/Users/你的用户名/Desktop/liMingFractions.dat";
    macOS/Linux示例:String fileName = "/Users/你的用户名/Desktop/liMingFractions.dat";
  • 确保路径的父目录存在
    如果你使用了多级目录的路径(比如"save/data/liMingFractions.dat"),FileOutputStream不会自动创建不存在的父目录,需要先手动创建:
    String fileName = "save/data/liMingFractions.dat";
    // 新增下面两行代码创建父目录
    File targetFile = new File(fileName);
    targetFile.getParentFile().mkdirs();
    
    try {  
        ObjectOutputStream serializer = new ObjectOutputStream(new FileOutputStream(targetFile));
        // 原有写入逻辑不变
    
  • 优化资源释放逻辑(可选,避免资源泄漏)
    你当前的代码如果在写入过程中抛出异常,serializer.close()不会执行,建议使用try-with-resources语法自动释放流资源:
    String fileName = "liMingFractions.dat";
    try (ObjectOutputStream serializer = new ObjectOutputStream(new FileOutputStream(fileName))) {
        serializer.writeObject(fa); 
        serializer.writeObject(alf);
    } catch(FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("序列化过程发生错误");
        e.printStackTrace();
    }
    

你已经确认Fraction类实现了Serializable接口,所以无需排查序列化本身的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:01