问题标签 [try-with-resources]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2996 浏览

java - 带有可关闭参数的 try-with-resources 的行为

Java-7 的 try-with-resources 是否需要将可关闭对象直接分配给变量?简而言之,这个代码块是...

相当于这个块?...

我对Java 语言规范第 14.20.3 节的理解说它们不一样,必须分配资源。从常见用法的角度来看,这将是令人惊讶的,我找不到任何针对该模式的文档警告。

0 投票
4 回答
912 浏览

java - 关闭文件会失败吗?

我看到了这段代码,想知道为什么in.close()finally block. 的要点try-with resources是它closesresources正确的。

是否会出现在 Java 中使用 try-with-resources 可以打开但无法关闭文件的情况?

0 投票
1 回答
256 浏览

java-5 - 是否可以在 java 5 上使用 try 资源?

我正在开发一个限制使用 java 1.5 的项目。我的问题是它充满了这样的样板:

如何在 java 1.5 中解决这个问题?我想要实现的是能够使用类似 java 1.7 中的 try-with-resources 或类似的构造。无论程序运行时发生什么但没有示例中的样板,我只想关闭一个语句。

0 投票
3 回答
2599 浏览

java - “try-with-resources”如何在该程序的上下文中实际工作,该程序删除给定目录节点下的所有文件和文件夹

该程序删除给定节点下的所有文件和文件夹。

*编辑*

我在驱动器 K 上有以下“测试”目录结构:

*结束编辑*

程序有效,因为我偶然发现了“try-with-resources”,这条线被所有 /////////////////////////////////////////////////////////////////////// .

我知道“尝试资源”是必要的:程序可以使用它,而不是没有它。

但我不明白为什么,也不知道它是如何解决我现在描述的原始问题的。

我最初将“资源”放在 try-block 上方,就像这样,这看起来很自然:

除了如上所示移动那一行之外,程序结构其他方面相同,所有文件和子文件夹已成功从文件夹中删除,但DirectoryNotEmptyException被抛出。Windows Explorer 确认程序因异常终止后目录为空。

为什么在空目录上抛出异常?

马的口中,“try-with-resources 语句......声明......一个对象......在语句末尾关闭。”

关闭发生在语句的末尾,所以在循环的末尾。即使使用 try-with-resources 怎么没有发生异常?

就像现在一样,在遍历整个节点之后,它下面的所有内容都被删除了。

那么 try-with-resources 实际上做了什么来启用删除一个没有 try-with-resources 就无法删除的空文件夹?

这些似乎不是愚蠢的问题或微不足道的情况。

DirectoryNotEmptyException无论如何都确实发生了,但是 try-with-resources 以某种方式处理了它?我不敢相信我在问这个问题,因为这看起来确实是一个愚蠢的问题,但究竟发生了什么让程序按预期运行呢?

0 投票
0 回答
601 浏览

java - 在 try 之外使用 try-with-resources 的资源

SocketChannel用来在服务器和客户端之间发送消息。一旦客户端连接到服务器,服务器就会在 try-with-resources 尝试中打开InputStreamsandOutputStream来接收来自客户端的消息并将消息发送客户端,如下所示:

我想out在尝试之外访问。try 包含一个 while 循环,该循环重复检查消息是否已到达in,它工作正常。

我尝试global_out通过执行以下操作设置全局变量,例如:

然后我尝试写入这个 OutputStream,如下所示:

我只调用sendMessage(Object)when should_ceckistrue并测试 if global_outis null,它不是。然而,sendMessage(Object)永远不会回来。如果global_out 不是 ,它一定是被设置的,那么为什么在终止null之前不能使用资源呢?try-with-resources

有什么办法可以解决这个问题吗?

0 投票
6 回答
38917 浏览

java - Try / Try-with-resources 和 Connection、Statement 和 ResultSet 关闭

我最近和我的教授讨论了如何处理基本的 jdbc 连接方案。假设我们要执行两个查询,这是他提出的

我不喜欢这种方法,对此我有两个问题:

1.A)我认为,如果在我们做“其他事情”的地方抛出任何异常,或者在该行中,或者在rs.close()方法结束s2.close()s1不会被关闭。我说得对吗?

1.B)教授一直要求我明确关闭结果集(即使声明文档明确表示它将关闭结果集)她说 Sun 推荐它。有什么理由这样做吗?

现在这是我认为是同一件事的正确代码:

2.A)这段代码正确吗?(是否保证方法结束时全部关闭?)

2.B)这是非常大且冗长的(如果有更多的语句,它会变得更糟)是否有任何更短或更优雅的方法可以在不使用 try-with-resources 的情况下做到这一点?

最后这是我最喜欢的代码

3)这段代码正确吗?我认为我的教授不喜欢这种方式,因为没有明确关闭 ResultSet,但她告诉我,只要在文档中清楚地表明所有内容都已关闭,她就可以接受。您能否提供任何带有类似示例的官方文档链接,或者根据文档显示此代码没有问题?

0 投票
4 回答
18452 浏览

java - java中的try-with-resources和return语句

我想知道是否将return语句放在try-with-resources块中会阻止资源自动关闭。

如果我写这样的东西,连接会被关闭吗?在 Oracle 文档中指出:

try-with-resources 语句确保每个资源在语句结束时关闭。

如果由于 return 语句而从未到达语句的末尾会发生什么?

0 投票
4 回答
1164 浏览

java - Try-with-resources 和 System.in

好的,这可能不是最好的问题,但我坚持下去,无法在网上找到答案。

此代码第二次不会从标准输入中读取:

我知道 java 的 try-with-resources 会递归地关闭链中的所有流,所以在第一次读取后System.in关闭。有什么好的解决方法吗?或者我真的应该处理关闭自己的流吗?

upd: 我试图处理关闭自己的流(即 java6 风格)。如果有人感兴趣,这是一个代码。但我注意到,这种闭链行为不是来自 try-with-resources bur,而是来自 close-methods 的实现。所以我没有从那次尝试中赢得任何东西。

我选择 fge 的解决方案是因为它是最冗长的解决方案。它直接对我有用。

总而言之,这对我来说似乎很奇怪,java没有开箱即用的解决方案,因为存在不应该关闭的系统流。

0 投票
4 回答
165 浏览

java - JDBC资源的正确使用方式

即使在 Java 7 中,我也经常看到这样的代码

但是根据规范,当连接关闭时,所有语句和结果集都会被释放。

我听说 JDBC 驱动程序有可能不遵守 JDBC API 的规则,旧的方式更好。我的问题是听听对此的看法。代码看起来更好,但如果它很危险怎么办?在我看来,最喜欢的方法是在这里使用try-with-resources。它足够安全吗?

0 投票
1 回答
3066 浏览

java - 如果在循环中抛出异常,则使用 try-with-resources 奇怪的“资源泄漏:流永远不会关闭”

为什么 Eclipse 会为以下代码发出奇怪的“资源泄漏:zin 永远不会关闭”警告,即使我使用try-with-resources

如果我修改代码上的“任何内容”,警告就会消失。下面我列出了 3 个修改后的版本,它们都可以(没有警告)。


Mod #1:如果我for从块中删除循环try,警告就会消失:

Mod #2:如果我保留for循环但我删除了包装,也没有警告ZipInputStream

Mod #3:如果我创建InputStream外部try-with-resources,也没有警告:

我使用 Eclipse Kepler (4.3.1) 但也使用 Kepler SR2 (4.3.2) 的结果相同。