关于关闭输入流的问题

twabcd0987 2011-09-21 02:58:16
import java.io.File;
import java.io.FileInputStream;
public class main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
FileInputStream fis =null;
fis = new FileInputStream ("d:/test/11.txt");
byte [] data = new byte [1024];
int i = 0;
int n = fis.read(data);

String s = new String(data,0,n);
System.out.println(s);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
fis.close();

}catch(Exception e){
System.out.println("cao");
}

}

}

}
小弟刚开始学java,这是在学习输入流的时候写的一段代码,可是编译的时候在fis.close()这里出了问题,eclipse给出的提示是fis cannot be resolved,这是怎么意思啊?
还有那位大哥能给解释一下是什么是j2ee,java ee,java se么,百度搜索了一下还是不理解这几个的区别。谢谢
...全文
325 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
carnival_ 2013-06-14
  • 打赏
  • 举报
回复
同意楼上。 你把try里面“FileInputStream fis =null;”申明放到try前就可以了
twabcd0987 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huangchenliang 的回复:]

FileInputStream fis = null;
定义到try外面就行了。
[/Quote]
确实是这样,学习了,非常感谢
twabcd0987 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ioe_gaoyong 的回复:]

你声明的fis的作用域不在finally里面,所以在finally的时候不认,看我改的就可以了
j2ee j2se这些东西你需要继续多学习才行,现在跟你说也就是个模糊的样子
你只需要知道j2ee的类库跟j2se不一样,j2ee依赖于j2se就可以了
Java code


import java.io.File;
import java.io.FileInputStream;
publi……
[/Quote]
恩,原来是这样,非常感谢
twabcd0987 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java_devil 的回复:]

谁教你那么写的
finally里面还嵌套try catch。。。
[/Quote]
这个是《编程那些事儿》上的一个例子。
lsl19881120 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java_devil 的回复:]
谁教你那么写的
finally里面还嵌套try catch。。。
[/Quote]
这么写很正确!保证了输入流的关闭!
风尘中国 2011-09-21
  • 打赏
  • 举报
回复
你声明的fis的作用域不在finally里面,所以在finally的时候不认,看我改的就可以了
j2ee j2se这些东西你需要继续多学习才行,现在跟你说也就是个模糊的样子
你只需要知道j2ee的类库跟j2se不一样,j2ee依赖于j2se就可以了


import java.io.File;
import java.io.FileInputStream;
public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fis =null;
try{

fis = new FileInputStream ("d:/test/11.txt");
byte [] data = new byte [1024];
int i = 0;
int n = fis.read(data);

String s = new String(data,0,n);
System.out.println(s);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
fis.close();

}catch(Exception e){
System.out.println("exception");
}

}

}

}
完美灬缺陷 2011-09-21
  • 打赏
  • 举报
回复
FileInputStream fis = null;
定义到try外面就行了。
liuyuhua0066 2011-09-21
  • 打赏
  • 举报
回复
Java里面的语句块是以 "{" 开始,以"}"结束,在语句块内定义的变量的作用域只是当前语句块,所以fis 会报未定义,你可以把FileInputStream fis定义为全局变量,这样就没有问题了。
j2ee==java ee,只不过j2ee这个叫法是很久以前的叫法,现在叫java ee
绝世酱油瓶 2011-09-21
  • 打赏
  • 举报
回复
谁教你那么写的
finally里面还嵌套try catch。。。

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧