我是否正确使用了 Java 7 try-with-resources

2023-11-21

我期望缓冲读取器和文件读取器关闭,并在抛出异常时释放资源。

public static Object[] fromFile(String filePath) throws FileNotFoundException, IOException
{
    try (BufferedReader br = new BufferedReader(new FileReader(filePath)))
    {
        return read(br);
    } 
}

但是,是否有要求catch成功关闭的条款?

EDIT:

本质上,Java 7 中的上述代码是否等同于 Java 6 中的以下代码:

public static Object[] fromFile(String filePath) throws FileNotFoundException, IOException
{

    BufferedReader br = null;

    try
    {
        br = new BufferedReader(new FileReader(filePath));

        return read(br);
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        try
        {
            if (br != null) br.close();
        }
        catch(Exception ex)
        {
        }
    }

    return null;
}

这是正确的,并且没有要求catch条款。 Oracle java 7 文档说资源将被关闭不管是否实际抛出异常。

你应该使用catch仅当您想对异常做出反应时才使用该子句。这catch条款将被执行after资源已关闭。

这是来自的一个片段Oracle 的教程:

以下示例从文件中读取第一行。它使用一个 BufferedReader 的实例从文件中读取数据。缓冲读取器 是程序结束后必须关闭的资源 它:

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br =
                   new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
} // In this example, the resource declared in the try-with-resources statement is a BufferedReader.

...因为 BufferedReader 实例是在 try-with-resource语句,无论是否存在都会关闭 try 语句正常或突然完成(由于 方法 BufferedReader.readLine 抛出 IOException)。

EDIT

关于新编辑的问题:

Java 6 中的代码执行catch之后的finally堵塞。这会导致资源仍然可能在catch block.

在Java 7语法中,资源是关闭的before the catch块,因此资源在该期间已经关闭catch块执行。这在上面的链接中有记录:

在 try-with-resources 语句中,运行任何 catch 或 finally 块 声明的资源被关闭后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我是否正确使用了 Java 7 try-with-resources 的相关文章

  • 如何设置JVM的PATH环境变量

    我正在尝试运行使用 Java 7 ProcessBuilder 安装在我的系统上的可执行文件 我注意到环境变量 PATH 可以通过 System getenv PATH 不包括我自己的自定义设置路径 它返回这个 usr bin bin us
  • Java:int数组用非零元素初始化

    据 JLS 称 int初始化后数组应立即用零填充 然而 我面临的情况并非如此 这种行为首先出现在 JDK 7u4 中 并且也出现在所有后续更新中 我使用 64 位实现 下面的代码抛出异常 public static void main St
  • 为什么不在java中使用带有锁的try?

    我读了这个话题 https stackoverflow com questions 6965731 are locks autocloseable 和这个博客文章 http www java7developer com blog p 256
  • 使用 AutoCloseable 关闭多个资源(try-with-resources)

    我知道 如果资源实现了 AutoCloseable 则您尝试传递的资源将自动关闭 到目前为止 一切都很好 但是 当我有多个想要自动关闭的资源时 我该怎么办 套接字示例 try Socket socket new Socket input n
  • Java 8 接口/类加载器发生变化?

    我发现 Java 1 7 51 和 Java 1 8 20 之间存在一些困难 初始情况 一个接口 interface InterfaceA public void doSomething 两类 public class ClassA imp
  • 使用java 7语法编译为java 5

    有没有办法使用 java 7 语法并生成适用于 1 5 的字节码 据我所知 选项 target and source不可能有什么不同 检查是否没有使用新的 API 也很好 但并不重要 不它不是 据我所知 不同 source and targ
  • 在 Linux 上找不到主类 - 类路径问题

    我在 Linux 机器上运行一些 jar 时遇到一些问题 基本上 我收到一个错误 说它找不到我的主 jar 的主类 该类确实存在 因此它一定是类路径问题 我不太擅长Linux 所以我正在寻找一些关于我可能遗漏的地方的建议 首先 我在用户 b
  • 我们可以使用jdk7 javac将具有java7特性的代码编译成java6字节码吗

    我正在考虑一个java项目是否可以生成2个jar 一个用于java7 一个用于java6 是的 源代码可能会使用一些java7的新功能 因此要生成 java6 jar 命令行将如下所示 javac target 1 6 bootclassp
  • JBoss AS 7 升级到 Java 7、JBoss VFS

    我们有一个 spring 应用程序 它动态加载基于 lib 文件夹中的组件 该应用程序需要部署在不同的AS上 例如Jetty Tomcat JBoss 现在 JBoss 有这个 VFS 功能 它看起来并没有真正解压你的战争 而是使用vfs
  • 如何使用 Java 7 和 spring-instrument 运行 Jacoco?

    由于我在 Java 7 中使用 cobertura 时遇到了一些问题 我正在尝试Jacoco 我的项目有一个父项目pom xml和子项目 在一个项目中 我使用 spring 来运行一些集成测试 所以我在这个项目的pom xml
  • java编译器目标版本“jsr14”与JDK 7/8

    谁能告诉我jsr14的目标选项javacJDK7 8 仍然可用吗 Say javac source 1 5 target jsr14 Hello java 我们在 OSGi 中大量使用 jsr14 因为它允许我们在 API 中使用泛型 但仍
  • Objects.hash() 与 Objects.hashCode(),需要澄清

    从 Java 7 开始 我们有 o hashCode Objects hashCode o Objects hash o 前两个与空检查大致相同 但最后一个是什么 当提供单个对象引用时 返回值不会 不等于该对象引用的哈希码 这是为什么 我的
  • 如何在不冒失去对称属性的风险的情况下用hibernate实现equals?

    在阅读了 再次 很久以前就应该这样做 正确实现 equals 和 hashcode 后 我得出了这些结论 这对我有用 如果是 JDK 7 之前的版本 更喜欢使用 Apache commons equalsbuilder 和 hashcode
  • 如何在 Mac OS X 10.7.3 上安装 JDK7 (Java 7)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在 Mac OS X 10 7 3
  • 调用动态和隐式方法

    据我从阅读中了解到this http blog headius com 2008 09 first taste of invokedynamic html关于 JDK 7 中新的 invokedynamic 字节码指令的帖子 它可以调用对象
  • java.security.InvalidAlgorithmParameterException:参数对象不是 ECParameterSpec

    我们在 Linux 机器上使用 WL 11g 和 jdk1 7 update 121 在对另一台 weblogic 机器进行 Web 服务调用期间 我们看到以下错误 有什么想法吗 2017 02 14 18 23 20 777 system
  • 如何设置IntelliJ IDEA项目SDK

    我刚刚安装了 IntelliJ IDEA 当我尝试创建我的第一个项目时 它要求我设置项目 SDK 当我单击 JDK 时 它要求我选择 JDK 的主目录 如下图所示 我无法找到它在哪里 对于新项目 选择 jdk 的主目录 eg C Java
  • 在 Java 7 和 8 中创建与现有列表不同的列表?

    如果我有 List
  • Java 7 中是否有针对 ImmutableEnumSet 的计划?

    我希望拥有 EnumSet 的所有效率并传递它 而不用担心有人会修改它 您可以使用 Google 集合 Guava 获得不可变的 EnumSet 资源 番石榴主页 http code google com p guava libraries
  • Java 8 不兼容类型

    这是简单的代码 import java util ArrayList import java util Collections import java util HashMap import java util Map public cla

随机推荐

  • 如何定义旋转函数

    如何定义一个旋转函数来生成给定列表的所有旋转 例如 旋转 1 2 3 4 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 我写了一个shift函数 可以重新排列顺序 shift Int gt Int shift x tail
  • AH01215:(8)执行格式错误:'/var/www/python/hello.py'的执行失败:/var/www/python/hello.py

    我正在尝试在 apache 服务器中将 python 作为 CGI 运行 Python 版本是 2 7 12 这是我的 apache conf 文件
  • useQuery 的奇怪问题:未读取查询参数

    我有一个传递字符串的组件 userToFetch 将其作为参数化查询中的可变参数 该组件如下所示 pages index jsx import React from react import useQuery from apollo rea
  • CSS - 行高属性,它是如何工作的(简单)

    So in 这个简单的例子我的最终结果是 这是一个非常简单的问题 但我就是无法理解它 为了实现我使用的数字的垂直居中 line height 100px 效果很好 并且一直在反复试验的基础上进行 我的问题具体是为什么line height
  • 为什么函数中不允许使用“from ... import *”? [复制]

    这个问题在这里已经有答案了 From 文档 导入的通配符形式 from module import 仅允许在模块级别 尝试在类或函数定义中使用它会引发SyntaxError 为什么 避免在函数中使用它有什么意义 有什么问题 CPython
  • WebView使用loadDataWithBaseUrl跳转到锚点

    我的 Android 应用程序使用 WebView 来显示我 即时 生成的一堆 HTML 代码 HTML 代码使用以下代码加载 StringBuilder builder new StringBuilder HTML builder app
  • jquery UI 对话框和 Asp.net UpdatePanel

    我正在寻找用于 asp net 的 JavaScript 模式对话框解决方案 jquery UI 对话框似乎不错 但它将对话框容器移动到 body 标记的底部 我更改了对话框代码以将对话框保留为 asp net 形式 但它仍然不在 upda
  • MATLAB - FFT 缺少基础[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我目前正在从事我的第四年项目 计算机科学 其中涉及音乐 gt 乐谱的自动转录 我目前正在 Matlab 中进行 但在某个阶段必须转换为 java 我的问题 我的程序返回纯正弦音的
  • 选择区域 OpenCV

    我是 OpenCV 新手 我想选择视频 图像中的特定区域进行检测 就我而言 我想检测仅在路上而不是在停车场的汽车 嗯 选择汽车需要使用训练数据 但选择 ROI 感兴趣区域 相当简单 考虑img cv2 imread image 在这种情况下
  • 如何使用“--multi-dex”选项?

    2013 11 13 18 39 09 XlApp Dx trouble writing output Too many method references 66024 max is 65536 You may try using mult
  • 当需要 Node.js 中的模块时,“点斜杠”(./) 是否是必需的?

    我正在学习 Node js 并使用 Visual Studio 2015 Node JS 扩展编写一个简单的模块 I know 意思是 在同一目录中查找文件 但在我见过的大多数系统中 比如说 include在 C 中 转发 是可选的 我尝试
  • javax.net.ssl.SSLException:收到致命警报:bad_record_mac

    我得到了一个javax net ssl SSLException Received fatal alert bad record mac用于 HTTPS 连接 并非每个请求都会发生这种情况 如果我发送相同的请求 10 次 我只会收到一两次此
  • 具有自定义浮点格式的 pprint

    我有一个带有元组键的嵌套字典结构 当我使用 pprint 漂亮地打印字典时 条目如下所示 A B C 0 14285714285714285 D 0 14285714285714285 E 0 14285714285714285 F 0 1
  • 指定的 JDK 版本为“2724.0.0.0.0”,最大值为“500.0.0.0.0”

    在安装 Netbeans IDE 最新版本时 我遇到了错误 指定的 JDK 版本为 2724 0 0 0 0 而最大值为 500 0 0 0 0 不确定是什么导致了这个问题 类路径 Java Home 都已正确设置 甚至jdk路径在Netb
  • java.io.StreamCorruptedException:无效的流标头:75720002

    我正在创建一个服务器客户端应用程序 其中服务器将 pdf 文件发送到所有连接的客户端 问题是我收到此错误 我寻找解决方案但找不到任何解决方案 这是错误 java io StreamCorruptedException invalid str
  • Eclipse 中缺少“maven package”菜单项

    我正在使用 Eclipse 3 7 和 m2eclipse 以前我知道有一个菜单条目 maven package 但由于我重新安装了 Ubuntu 所以没有条目 我必须 maven install 才能执行相同的操作 现在我想知道是否可以找
  • uniqid有多独特?

    这个问题其实并不是一个寻求解决方案的问题 而更多的是一个简单的好奇心问题 PHP uniqid 函数有一个更多的熵标志 使输出 更独特 这让我想知道 当 more entropy 为真时和不为真时 该函数多次产生相同结果的可能性有多大 换句
  • Java 类中的 Scala getter 和 setter

    我想创建一个遵循 Scala setter getters 约定的 Java 类 我尝试遵循简单的课程 但它不起作用 public class JavaA private int a 0 public int a return a publ
  • 在 Delphi 2009 中显示 PDF 文件的最佳方式是什么 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我应该使用什么组件在 Delphi 2009 应用程序中显示 PDF 文件 EDIT 我一直在使用PDF阅读器by Synactis 一个非常好的免
  • 我是否正确使用了 Java 7 try-with-resources

    我期望缓冲读取器和文件读取器关闭 并在抛出异常时释放资源 public static Object fromFile String filePath throws FileNotFoundException IOException try