问题标签 [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.
java - 带有可关闭参数的 try-with-resources 的行为
Java-7 的 try-with-resources 是否需要将可关闭对象直接分配给变量?简而言之,这个代码块是...
相当于这个块?...
我对Java 语言规范第 14.20.3 节的理解说它们不一样,必须分配资源。从常见用法的角度来看,这将是令人惊讶的,我找不到任何针对该模式的文档警告。
java - 关闭文件会失败吗?
我看到了这段代码,想知道为什么in.close()
在finally block
. 的要点try-with resources
是它closes
是resources
正确的。
是否会出现在 Java 中使用 try-with-resources 可以打开但无法关闭文件的情况?
java-5 - 是否可以在 java 5 上使用 try 资源?
我正在开发一个限制使用 java 1.5 的项目。我的问题是它充满了这样的样板:
如何在 java 1.5 中解决这个问题?我想要实现的是能够使用类似 java 1.7 中的 try-with-resources 或类似的构造。无论程序运行时发生什么但没有示例中的样板,我只想关闭一个语句。
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 以某种方式处理了它?我不敢相信我在问这个问题,因为这看起来确实是一个愚蠢的问题,但究竟发生了什么让程序按预期运行呢?
java - 在 try 之外使用 try-with-resources 的资源
我SocketChannel
用来在服务器和客户端之间发送消息。一旦客户端连接到服务器,服务器就会在 try-with-resources 尝试中打开InputStreams
andOutputStream
来接收来自客户端的消息并将消息发送到客户端,如下所示:
我想out
在尝试之外访问。try 包含一个 while 循环,该循环重复检查消息是否已到达in
,它工作正常。
我尝试global_out
通过执行以下操作设置全局变量,例如:
然后我尝试写入这个 OutputStream,如下所示:
我只调用sendMessage(Object)
when should_ceck
istrue
并测试 if global_out
is null
,它不是。然而,sendMessage(Object)
永远不会回来。如果global_out
不是 ,它一定是被设置的,那么为什么在终止null
之前不能使用资源呢?try-with-resources
有什么办法可以解决这个问题吗?
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,但她告诉我,只要在文档中清楚地表明所有内容都已关闭,她就可以接受。您能否提供任何带有类似示例的官方文档链接,或者根据文档显示此代码没有问题?
java - java中的try-with-resources和return语句
我想知道是否将return语句放在try-with-resources块中会阻止资源自动关闭。
如果我写这样的东西,连接会被关闭吗?在 Oracle 文档中指出:
try-with-resources 语句确保每个资源在语句结束时关闭。
如果由于 return 语句而从未到达语句的末尾会发生什么?
java - Try-with-resources 和 System.in
好的,这可能不是最好的问题,但我坚持下去,无法在网上找到答案。
此代码第二次不会从标准输入中读取:
我知道 java 的 try-with-resources 会递归地关闭链中的所有流,所以在第一次读取后System.in
关闭。有什么好的解决方法吗?或者我真的应该处理关闭自己的流吗?
upd: 我试图处理关闭自己的流(即 java6 风格)。如果有人感兴趣,这是一个代码。但我注意到,这种闭链行为不是来自 try-with-resources bur,而是来自 close-methods 的实现。所以我没有从那次尝试中赢得任何东西。
我选择 fge 的解决方案是因为它是最冗长的解决方案。它直接对我有用。
总而言之,这对我来说似乎很奇怪,java没有开箱即用的解决方案,因为存在不应该关闭的系统流。
java - JDBC资源的正确使用方式
即使在 Java 7 中,我也经常看到这样的代码
但是根据规范,当连接关闭时,所有语句和结果集都会被释放。
我听说 JDBC 驱动程序有可能不遵守 JDBC API 的规则,旧的方式更好。我的问题是听听对此的看法。代码看起来更好,但如果它很危险怎么办?在我看来,最喜欢的方法是在这里使用try-with-resources。它足够安全吗?
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) 的结果相同。