java - 尝试在 Java 中使用多个资源

标签 java try-with-resources autocloseable

<分区>

我是 Java8 的新手,我想知道对于 AutoCloseable 资源,我是否必须为每个资源添加一个 try resource,否则它将与上面的代码一起工作

try (Connection conn = getConnection();) {

            Statement stmt = conn.createStatement();

            ResultSet rset = stmt.executeQuery(sql);

            while (rset.next()) {
                TelefonicaDataVO vo = new TelefonicaDataVO();
                vo.setTelefonicaDataId(rset.getString("Telefonica_PSD_ID"));
                vo.setReceptionDate(nvl(rset.getTimestamp("CREATION_DATE")));
                vo.setMessage(nvl(rset.getString("MESSAGE")));
                ret.add(vo);
            }
        }

最佳答案

通过在 try block 中声明所有资源,Try with resources 可以与多个资源一起使用,此功能在 java 7 中引入,但在java 8 如果你有多个,你可以像下面这样给出

try (
        java.util.zip.ZipFile zf =
             new java.util.zip.ZipFile(zipFileName);
        java.io.BufferedWriter writer = 
            java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
    ) {
        // Enumerate each entry
        for (java.util.Enumeration entries =
                                zf.entries(); entries.hasMoreElements();) {
            // Get the entry name and write it to the output file
            String newLine = System.getProperty("line.separator");
            String zipEntryName =
                 ((java.util.zip.ZipEntry)entries.nextElement()).getName() +
                 newLine;
            writer.write(zipEntryName, 0, zipEntryName.length());
        }
    }

在此示例中,try-with-resources 语句包含两个用分号分隔的声明:ZipFileBufferedWriter。当紧随其后的代码块正常终止或由于异常终止时,将按此顺序自动调用 BufferedWriter 和 ZipFile 对象的关闭方法。 请注意,资源的关闭方法的调用顺序与其创建顺序相反。

请参阅documentation了解更多信息

关于java - 尝试在 Java 中使用多个资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175526/

相关文章:

java - 为什么我们必须在 try-with-resource block 中声明和定义资源?

java - 如果 JVM 实现因一台机器而异,字节码生成如何使 Java 平台独立?

java - 绘图不显示

java - FileInputStream 和关闭

java-7 - try-with-resources:Java 是否对 .close() 的调用顺序做出任何保证?

apache-poi - 与资源一起使用时是否需要处理 SXSSFWorkbook

负数的Java正则表达式?

java - 为什么我会收到 NumberFormatException 错误?

java - 试用资源关闭订单

java - 使用 "try with resources"创建没有任何引用的资源