这样写为啥会报错..

这样写为啥会报错..

package imooc.com.work;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamTest {
 public static void main(String[] args) {
  try
   FileInputStream fis=new FileInputStream("speech.txt");
   int n=0;
   try {
    while((n=fis.read())!=-1){
     int count=0;
     count++;
     System.out.println((char)n);
     System.out.println("字节的个数"+count);
     }
   }  catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   fis.close();
  }
}



http://img1.sycdn.imooc.com//climg/5c10c29100010f9807970618.jpg 


正在回答 回答被采纳积分+1

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

2回答
提问者 卡内基先生 2018-12-12 21:14:28

http://img1.sycdn.imooc.com//climg/5c11094a0001d68a04990051.jpg

老师这里为什么又要多一步   FileInputStream fis=null?

  • 因为io流的关闭写在了finally代码块中了,所以需要在try块外声明一下fis对象,才可以在finally代码块中调用,否则编译器会报错,祝学习愉快~
    2018-12-13 11:03:14
好帮手慕珊 2018-12-12 17:23:39

你好!try后面要有大括号{,帮你把代码整理了一下,层次结构更清晰一些,不用写太多try-catch块,整理后的代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("speech.txt");
int n = 0;
while ((n = fis.read()) != -1) {
int count = 0;
count++;
System.out.println((char) n);
System.out.println("字节的个数" + count);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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