2017-10-18 45 views
1
文件資源

我想實現在常規AutoClosable的InputStream,但它無法識別語法如下片斷,這是我從我的老項目的Java類了Autoclosable,在Groovy

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. 是否類似AutoClosablenew File(relativePath).getText()自動釋放文件資源,我在哪裏可以找到它的文檔?
  2. 爲什麼try (InputStream istream = new FileInputStream(new File(relativePath)))語法在groovy中工作?

Groovy:在2.4.7, JVM:1.8.0_111

+2

File.getText()常規增強實現一個try-finally和關閉該流。 File.getText()調用[IOGroovyMethods](http://docs.groovy-lang.org/2.4.3/html/api/org/codehaus/groovy/runtime/IOGroovyMethods.html#getText(java.io.Reader) )哪些文檔「讀者在此方法返回之前關閉」。 – JasonM1

回答

4

的嘗試,與資源的語法在Java 7中不直接支持Groovy中,但相當於語法使用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()常規增強實現一個try-終於和關閉該流。

這做同樣的事情作爲上述代碼:

text = new File(relativePath).getText() 
+0

'toString(istream)'已棄用 – Ricky