2012-03-06 57 views
2
Charset charset = Charset.forName("US-ASCII"); 
try (BufferedReader reader = Files.newBufferedReader(file, charset)) { 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 
} catch (IOException x) { 
    System.err.format("IOException: %s%n", x); 
} 

我在The Java Tutorials上看到了這樣一段代碼,其中括號聲明在關鍵字'try'後面。這有效嗎?爲什麼不能日食識別它並報告語法錯誤?java try catch block的特殊語法

+0

(我想知道爲什麼他們有這個多餘的任務。) – 2012-03-07 01:15:55

回答

2
介紹

這是Java 7的try with resource功能。

您需要將Eclipse的編譯器符合性級別設置爲1.7才能識別語法。

您可以全局設置Window > Preferences > Java > Compiler或簡單說下在項目右鍵單擊並做如下圖所示:

enter image description here

+0

OP說:「*爲什麼不能ecli pse識別它並報告語法錯誤?*「 - 他的Eclipse識別這個語法,它已經可以在1.7 JDK下工作... – 2012-03-06 10:53:09

+0

進一步的問題:我將JRE1.7安裝到Eclipse中(通過Windows-Preference-Java-Installed JRE)能夠導入相關的軟件包。但是我在Executation Env中找不到1.7,也無法將Complier合規性級別設置爲1.7。爲什麼? – user796857 2012-03-07 07:08:03

+0

@ user796857因爲你需要的是JDK,而不是JRE。 – adarshr 2012-03-07 09:08:12

0

不,這不是有效的。試試這個:

Charset charset = Charset.forName("US-ASCII"); 
try { 
    BufferedReader reader = Files.newBufferedReader(file, charset); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 
} catch (IOException x) { 
    System.err.format("IOException: %s%n", x); 
} 
+3

曾聽說過Java 7嗎? – 2012-03-06 10:53:40

+1

這個問題沒有標籤爲「java 7」,所以這個答案是正確的,因爲(合理的)假設我們在java 6 land – Bohemian 2012-03-06 11:17:25

+0

同意,但它看起來像OP根本不知道Java 7的存在和功能。順便提一下,Java 6的生命週期將在今年11月份發佈:http://www.oracle.com/technetwork/java/eol-135779.html – 2012-03-06 11:48:11

1

Eclipse中清楚地表明,爲什麼這不是有效的語法:

Set project compiler compliance settings to 1.7

Set project JRE build path entry to 'JavaSE-1.7'

這意味着,你的Java安裝了6個,但教程

(...) primarily describe features in Java SE 7.

http://docs.oracle.com/javase/tutorial/index.html