java关闭流的顺序影响程序结果

下是另存为按钮的处理方法当先关闭fw后关闭bw时,无论jta里写什么保存的txt都是空文件jta为JFrameTxetAreapublicvoidactionPerfor... 下是另存为按钮的处理方法 当先关闭fw后关闭bw时,无论jta里写什么保存的txt都是空文件
jta为JFrameTxetArea
public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("save")){

JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("另存为...");
jfc.showSaveDialog(null);
jfc.setVisible(true);

String file=jfc.getSelectedFile().getAbsolutePath();
FileWriter fw=null;
BufferedWriter bw=null;

try {
fw=new FileWriter(file);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
bw=new BufferedWriter(fw);
try {
bw.write(jta.getText());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

finally{
try {
bw.close();
fw.close()
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
展开
 我来答
wypbt1032
推荐于2018-04-13 · TA获得超过219个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:104万
展开全部
bw是缓冲流,使用bw.write 后,数据并没有直接写入txt文件中,而是在bw的缓冲区内,所以这时先关闭输出流fw,则txt中就是空的了,如果先关闭bw,则缓冲流会在内部先调用bw.flush();将缓冲区的内容输出到文件中,所以txt才有内容。要解决这个问题,需要在bw.write 后显示调用bw.flush();这样先关闭那个流都一样了
jason19659
2013-05-24 · TA获得超过372个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:123万
展开全部

api中的解释都是

关闭此流,但要先刷新它。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式