You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java 8结合try-with-resource的FileOutputStream编译报错求助

解决Eclipse中try-with-resources的编译报错问题

这个问题的根源很明确:try-with-resources是Java 7才新增的语法特性,如果你的项目当前的编译合规级别(source level)低于1.7,编译器自然不支持这个写法,也就会抛出你看到的"Resource specification not allowed here for source level below 1.7"错误。Eclipse提示的修复方向完全正确,下面给你详细的操作步骤,以及兼容低版本JDK的备选写法。

方案一:升级项目的编译级别和JRE到1.7及以上

按照以下步骤在Eclipse中完成配置:

  • 右键你的项目,选择「Properties」(属性)
  • 在左侧导航栏找到「Java Compiler」,勾选「Enable project specific settings」(如果未勾选)
  • 将「Compiler compliance level」下拉选项改为1.7或更高版本(推荐选择1.8、11这类更常用的LTS版本)
  • 切换到「Java Build Path」标签页,找到「Libraries」列表里的「JRE System Library」,如果它的版本低于1.7:
    • 点击「Edit」,选择「Installed JREs」中已配置的1.7+版本JRE,或者点击「Add」添加对应的JRE
  • 点击「Apply」再点击「OK」,重新编译项目就能解决报错

方案二:使用传统try-catch-finally关闭资源(兼容Java 6及以下)

如果暂时无法升级JDK版本,你可以改用传统的资源关闭方式,手动在finally块中关闭流:

public static void main(String[] args) { 
    Employee employeeOut = null; 
    FileOutputStream fos = null;
    ObjectOutputStream oos = null;
    
    try {
        fos = new FileOutputStream("Employee.ser");
        oos = new ObjectOutputStream(fos);
        // 在这里添加你的序列化逻辑,比如:
        // oos.writeObject(employeeOut);
    } catch (IOException e) {
        // 处理IO异常
        e.printStackTrace();
    } finally {
        // 手动关闭资源,注意顺序(先关上层流,再关底层流)
        try {
            if (oos != null) {
                oos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if (fos != null) {
                fos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

火山引擎 最新活动