gpt4 book ai didi

java - 可自动关闭,Groovy 中的文件资源

转载 作者:行者123 更新时间:2023-12-03 01:40:12 29 4
gpt4 key购买 nike

我正在尝试实现 AutoClosable groovy 中的 InputStream 但它无法识别以下代码片段的语法,这是我从旧项目的 Java 类中获取的

try (InputStream istream = new FileInputStream(new File(relativePath))) {
return IOUtils.toString(istream));
} catch (IOException e) {
e.printStackTrace();
}

所以我使用了new File(relativePath).getText(),它有效。

def static getTemplateAsString(def relativePath) {
/*try (InputStream istream = new FileInputStream(new File(relativePath))) {
return IOUtils.toString(istream));
} catch (IOException e) {
e.printStackTrace();
}*/
try {
return new File(relativePath).getText()
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace()
} catch (IOException ioe) {
ioe.printStackTrace()
} catch (Exception e) {
e.printStackTrace()
}
return null
}

我有 2 个问题

  1. 是否new File(relativePath).getText()自动释放文件资源,类似于 AutoClosable ,我在哪里可以找到它的文档?
  2. 为什么 try (InputStream istream = new FileInputStream(new File(relativePath))) 语法不能在 groovy 中工作?

Groovy:2.4.7,JVM:1.8.0_111

最佳答案

Groovy 不直接支持 Java 7 中引入的 try-with-resource 语法,但等效语法使用 withCloseable 方法(对于流和读取器也有类似的方法)和闭包代码块。评论Groovy enhancements to File I/O及相关tutorial .

示例:

String text = null
new File(relativePath).withInputStream { istream ->
text = IOUtils.toString(istream);
} catch (IOException e) {
e.printStackTrace();
}
return text

对于问题的第二部分,File.getText() groovy 增强实现了 try-finally 并关闭流。

这与上面的代码执行相同的操作:

text = new File(relativePath).getText()

关于java - 可自动关闭,Groovy 中的文件资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46809676/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com