今天遇到这样的代码
public static int countWordInFile(String filename, String word) {
int counter = 0;
try (FileReader fr = new FileReader(filename)) {
try (BufferedReader br = new BufferedReader(fr)) {
String line = null;
while ((line = br.readLine()) != null) {
int index = -1;
while (line.length() >= word.length() && (index = line.indexOf(word)) >= 0) {
counter++;
line = line.substring(index + word.length());
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return counter;
}
这段代码中的try在JDK6及以前的版本中会报try括号后的错,因为没有这种写法。这种写法在JDk7及以后版本可以用。其相当于如下代码
public static int countWordInFile(String filename, String word)
throws IOException {
int counter = 0;
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
try {
try {
String line = null;
while ((line = br.readLine()) != null) {
int index = -1;
while (line.length() >= word.length()
&& (index = line.indexOf(word)) >= 0) {
counter++;
line = line.substring(index + word.length());
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return counter;
} finally {
fr.close();
br.close();
}
}
其实就是简化finally,即try后小括号里的代码不再需要在finally代码块中释放。简化了代码书写。