如题,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);
}
}
}