一段代码,功能是输入文件名,输出文件内容。可以重复输入文件名:
import java.io.*;
import java.util.*;public class Test {
public static void main(String[] args){
while(true)
{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));            
try{
String str = buf.readLine();
System.out.println(str);
FileReader f = new FileReader(str);
try{
int b;
while ((b=f.read()) != -1){
System.out.print((char)b);
}
}catch (IOException ie){
System.out.println("文件读取错误");
System.exit(1);
}
//buf.close();
//f.close();
}catch (FileNotFoundException fnfe){
System.out.println("找不到指定文件");
System.exit(1);
}catch (IOException ie){
ie.printStackTrace();
System.out.println("文件名输入失败");
System.exit(1);
}
}

}    只有在注释buf.close()和f.close()时才能实现无限输入,不注释时第二次输入文件名会抛IO异常。
    想请教一下,为什么不能关掉buf和f。按道理,就算关掉了,第二次循环时也会生成一个新的输入输出流?

解决方案 »

  1.   


    public static void main(String[] args)
    {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        while (true)
        {
            try
            {
                String str = buf.readLine();
                System.out.println(str);
                FileReader f = new FileReader(str);
                try
                {
                    int b;
                    while ((b = f.read()) != -1)
                    {
                        System.out.print((char) b);
                    }
                }
                catch (IOException e)
                {
                    System.out.println("文件读取错误");
                    break;
                }
                finally
                {
                    f.close();
                }
            }
            catch (FileNotFoundException fnfe)
            {
                System.out.println("找不到指定文件");
                break;
            }
            catch (IOException ie)
            {
                System.out.println("文件名输入失败");
                break;
            }
        }
    }用这个试试。
      

  2.   

        我想问问BufferedReader流buf在每次输出完关闭,下次循环再建立为什么会出错,就是在finally里面加上buf.close()为什么会报错。
      

  3.   

    BufferedReader 用的是 System.in,这个流和文件流不一样,关了之后你的程序无法接收从控制台输入的数据,至于这个流有什么特点,你去百度查一下 in out err 三个流的定义吧。