Java Groovy中的自动关闭文件资源
我试图在groovy中实现InputStream,但它无法识别下面代码段的语法,这是我从旧项目的Java类中获取的Java Groovy中的自动关闭文件资源,java,groovy,Java,Groovy,我试图在groovy中实现InputStream,但它无法识别下面代码段的语法,这是我从旧项目的Java类中获取的 try (InputStream istream = new FileInputStream(new File(relativePath))) { return IOUtils.toString(istream)); } catch (IOException e) { e.printStackTrace(); } 因此,我使用了有效的新文件(relativePat
try (InputStream istream = new FileInputStream(new File(relativePath))) {
return IOUtils.toString(istream));
} catch (IOException e) {
e.printStackTrace();
}
因此,我使用了有效的新文件(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
}
我有两个问题
try(InputStream=newfileinputstream(newfile(relativePath))
语法在groovy中不起作用JVM:1.8.0_111Groovy的try with resource习惯用法是withXxx方法。在你的情况下是这样的
new File(baseDir,'haiku.txt').withInputStream { stream ->
// do something ...
}
参见Groovy不直接支持Java 7中的try-with-resource语法,但等效语法使用withCloseable方法(也使用用于流和读取器的类似方法)和闭包代码块。回顾和相关的研究 例如:
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()
toString(istream)
是不推荐的文件。getText()groovy增强功能最终实现了一个try并关闭流。File.getText()调用“在该方法返回之前关闭读取器”的文档。