老师,请看一下,有什么地方可以优化的吗?

老师,请看一下,有什么地方可以优化的吗?

package com.imooc.charstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class StreamTest {
  public void transWriteByBuf(){
   try {
   FileOutputStream fos=new FileOutputStream("hello.txt");
   OutputStreamWriter osw=new OutputStreamWriter(fos);
   BufferedWriter bfw=new BufferedWriter(osw);
   String str="你好吗?\r\n我很好!";
   bfw.write(str);
   bfw.flush();
   fos.close();
   osw.close();
   bfw.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
  
  public void transReadByBuf(){
   try {
   FileInputStream fis=new FileInputStream("hello.txt");
   InputStreamReader isr=new InputStreamReader(fis);
   BufferedReader bfr=new BufferedReader(isr);
   //以下两种方法都可以
//   while(bfr.ready()) {
//    System.out.println(bfr.readLine());
//    }
   String str;
   while((str=bfr.readLine())!=null) {
   System.out.println(str);
   }

   fis.close();
   isr.close();
   bfr.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
 public static void main(String[] args) {
  StreamTest st=new StreamTest();
  st.transWriteByBuf();
  st.transReadByBuf();
 }
 
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学可以把FileInputStream这些初始化赋值定义在try外面,这样他的作用范围就是在整个方法里了!也就可以在finally里使用。例如 

    FileInputStream fis=null; 

    try{ 

        fis=new FileInputStream("hello.txt"); 

    }catch (IOException e) { 

        e.printStackTrace(); 

    }finally{ 

        fis.close();

     } 

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

irista23 2019-03-10 13:14:13

程序运行符合题目要求,非常好!建议把流的关闭放到finally中,这样即时try中操作出现了异常,也可以正常关闭输入输出流。

  • 可是 不在作用范围内啊 在finally 里面写这些 都是没有被声明的
    2019-04-29 21:55:03
  • 你可以声明在try外面,初始化赋值在try里面
    2019-04-30 09:51:00
  • 同学可以把FileInputStream这些初始化赋值定义在try外面,这样他的作用范围就是在整个方法里了!也就可以在finally里使用。例如 FileInputStream fis=null; try{ fis=new FileInputStream("hello.txt"); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ fis.close(); } 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-04-30 10:33:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师