Java Groovy中的自动关闭文件资源

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

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

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
}
我有两个问题

  • 新文件(relativePath).getText()是否与自动发布文件资源类似,在哪里可以找到它的文档
  • 为什么
    try(InputStream=newfileinputstream(newfile(relativePath))
    语法在groovy中不起作用
  • Groovy:2.4.7,
    JVM:1.8.0_111

    Groovy的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()调用“在该方法返回之前关闭读取器”的文档。