黑马程序员技术交流社区
标题:
IO 流问题
[打印本页]
作者:
学习代码
时间:
2014-3-30 15:03
标题:
IO 流问题
import java.io.*;
class Demo3
{
public static void main(String[] args) //throws IOException
{ BufferedReader ber= null;
BufferedWriter bfr = null;
try
{ //这个地方没太明白?为什么不在外面也定义一下FileReader和FileWriter呢?
//如果传的文件不存在呢?大侠指教一下 ,
ber = new BufferedReader(new FileReader("demo1.java"));
bfr = new BufferedWriter(new FileWriter("demo1_copy.java"));
while(true)
{
String s = ber.readLine();
if(s==null)
break;
else
bfr.write(s);
bfr.newLine();
bfr.flush();
}
}
catch (Exception e)
{
throw new RuntimeException("数据异常");
}
finally
{
try
{
if(ber== null)
ber.close();
}
catch (Exception e)
{
throw new RuntimeException("读出数据异常");
}
try
{
if(bfr== null)
bfr.close();
}
catch (Exception e)
{
throw new RuntimeException("写入数据异常");
}
}
}
}
复制代码
谢谢
作者:
osully
时间:
2014-3-30 15:27
这就是 局部变量 , 局部变量的作用范围只在一个大括号内
所以必须在try的大括号外面,后面的才可以调用这个变量啊
作者:
僚机i
时间:
2014-3-30 16:15
try
{ //这个地方没太明白?为什么不在外面也定义一下FileReader和FileWriter呢?
//如果传的文件不存在呢?大侠指教一下 ,
ber = new BufferedReader(new FileReader("demo1.java"));
bfr = new BufferedWriter(new FileWriter("demo1_copy.java"));
while(true)
{
String s = ber.readLine();
if(s==null)
break;
else
bfr.write(s);
bfr.newLine();
bfr.flush();
}
}
复制代码
这里的缓冲区的变量,是需要释放资源的。
而FileReader和FileWriter 作为他们的参数传入。就是作为局部变量,用完了就释放了资源。
本身缓冲区(BufferedReader,BufferedWriter) 实例化对象,传值,是要抛出异常的。
在这里可以try 也可以抛给JVM。当然不建议抛给JVM。
还有就是如果FileReader对象加载的文件找不到,或不存在,就要在跳到catch中,执行相应的catch块的代码。
你这里用了Exception 处理的异常。。所以无论try中的那个部分有运行异常。他都会执行catch块中的代码,
也就是throw new RuntimeException("读出数据异常");
作者:
清风木扬
时间:
2014-3-30 17:53
变量作用域的问题,定义外边finally,关流时不就找不到那个对象了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2