当前位置: 首页 > 面试题库 >

尝试使用Java中的多个资源

章宏恺
2023-03-14
问题内容

我是的新手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 块中声明所有资源,可以尝试将资源与多个资源一起使用,并且此功能是 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对象的close方法。
请注意,资源的close方法以其创建的相反顺序调用。

请参阅文档以获取更多信息



 类似资料:
  • 我是新手,我想知道,对于资源,我是否必须为每个

  • 我知道,如果资源已实现自动关闭,您通过尝试传递的资源将自动关闭。到现在为止,一直都还不错。但是,当我有几个我想要自动关闭的资源时,我该怎么办呢。带插座的示例; 所以我知道套接字将被正确关闭,因为它在try中作为参数传递,但是输入和输出应该如何正确关闭呢?

  • 问题内容: 我一直在看代码,并且看到了尝试资源的机会。我以前使用过标准的try-catch语句,看起来它们在做同样的事情。所以我的问题是“ 尝试使用资源”与“尝试捕获 ”之间的区别是什么,哪个更好。 这是尝试使用资源: 问题答案: 尝试使用资源的重点是确保可靠地关闭资源。 当你不使用try-with-resources时,存在一个潜在的陷阱,称为异常屏蔽。当try块中的代码引发异常,而finall

  • 我需要打开N个多播套接字(其中N来自参数列表的大小)。然后,我将向循环中的N个套接字中的每个套接字发送相同的数据,最后关闭每个套接字。我的问题是,如何使用try with resources块来实现这一点?以下是我将如何使用单个资源来实现这一点: 我能想到的使用多个端口执行此操作的唯一方法如下: 有没有一种更简洁的方法来实现这一点,或者我提出的解决方案是否尽可能好?

  • 这是一种向可观察的客户列表中添加新行星的方法。 我想知道我是否正确使用资源尝试,以及自动关闭是否工作。 我的问题是,这部分需要被封闭在一个try-catch块中,还是自动关闭。

  • 由于Java9,我们可以有效地使用最终变量与资源。 下面的示例显示了一种情况,其中一个资源初始化引发异常。 当我运行这个示例时,我得到的唯一输出是RuntimeException,这意味着Resource1没有关闭。这是意料之中的,因为它没有在try with resources中初始化。 但是,这是预期的结果,还是我遗漏了什么? 因为,如果这实际上是它应该工作的方式,那么在我看来,这种新语法实际