JDK7的 try-catch 关闭资源

如题,JDK7说新增了try-catch 关闭资源的功能,试了一把确实行,关闭资源前,系统会自动把缓存里的数据推送到节点里, 但今天写了个例子 发现不能推送。

public class Test {
public static void main(String[] args) throws IOException {

    try (
            // 创建一个输出流,输出到who.txt文档
            FileOutputStream fos = new FileOutputStream("who.txt");
            // 将字节流转换成字符流
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            // 将字符流包装成字符缓冲流
            BufferedWriter bw = new BufferedWriter(osw);
            // 创建一个输入流,从who.txt文档到内存中
            FileInputStream fis2 = new FileInputStream("who.txt");
            // 将字节流转换成字符流
            InputStreamReader isr = new InputStreamReader(fis2);
            // 将字符流包装成字符缓冲流
            BufferedReader bf = new BufferedReader(isr);) {
        bw.write("谦谦君子,温润如玉");
        bw.flush();// 必须手动推送,不然不能输出!!!
        String hasNext = null;
        while ((hasNext = bf.readLine()) != null) {
            System.out.println(hasNext);
        }
    } catch (Exception e) {
        // TODO: handle exception
    }

}

}

谁能解释下?是资源没关闭呢?还是关闭前没能够推送? 如果我不用try-catch,直接关闭,最后会把内容推送出来。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class FileInputStreamTest4 {

public static void main(String[] args) throws IOException {
    // 创建一个输出流,输出到who.txt文档
    FileOutputStream fos = new FileOutputStream("who.txt");
    // 将字节流转换成字符流
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    // 将字符流包装成字符缓冲流
    BufferedWriter bw = new BufferedWriter(osw);
    // 创建一个输入流,从who.txt文档到内存中
    FileInputStream fis2 = new FileInputStream("who.txt");
    // 将字节流转换成字符流
    InputStreamReader isr = new InputStreamReader(fis2);
    // 将字符流包装成字符缓冲流
    BufferedReader bf = new BufferedReader(isr);

    bw.write("谦谦君子,温润如玉");
    bw.close();// 还是手动推送的好
    String hasNext = null;
    while ((hasNext = bf.readLine()) != null) {
        System.out.println(hasNext);
    }

}

}