黑马程序员技术交流社区

标题: 关于io的一个问题 [打印本页]

作者: 阳丹    时间: 2013-6-8 00:35
标题: 关于io的一个问题
本帖最后由 阳丹 于 2013-6-8 22:55 编辑

//编写程序拷贝一个文件,

public class Test {

        public static void main(String[] args){
                copy_File();
        }
        
        public static void copy_File(){
                //建立缓冲区
                BufferedReader bufr = null;
                BufferedWriter bufw = null;

                try{
                        //将文件读取流对象传入缓冲区内
                        bufr = new BufferedReader(new FileReader(new File("Test1.java")));
                        //将文件写入流对象传入缓冲区内        
                        bufw = new BufferedWriter(new FileWriter(new File("Test1_bak.java")));

                        String line = null;
               
                        //调用BufferedReader的readLine方法 读取数据
                        while((line = bufr.readLine())!=null){
                                //调用BufferedWriter的Write方法 写入数据
                                bufw.write(line);
                                //换行
                                bufw.newLine();
                                //将缓冲区内的字符刷新到目的文件中去
                                bufw.flush();
                        }
                }
                catch (IOException e){
                        throw new RuntimeException("文件读取失败");
                }finally {
                        //关闭读取流
                        try {
                                if(bufr!=null)
                                   bufr.close();               
                           
                        }catch (IOException e){
                                throw new RuntimeException("文件读取流关闭失败");
                        }try {
                                // 关闭写入流
                                if(bufw!=null)
                                        bufw.close();
                        }catch (IOException e){
                                throw new RuntimeException("文件写入流失败");
                        }
                }
        }
}

编译失败报以下错误  求指点
Exception in thread "main" java.lang.RuntimeException: 文件读取失败
        at com.itheima.Test.copy_File(Test.java:43)
        at com.itheima.Test.main(Test.java:16)





作者: peerless2012    时间: 2013-6-8 09:03
楼主在new File()之后没有判断文件是否存在

修改如下:

  1. import java.io.*;


  2. public class Test {

  3.         public static void main(String[] args){
  4.                 copy_File();
  5.         }
  6.         
  7.         public static void copy_File(){
  8.                 //建立缓冲区
  9.                 BufferedReader bufr = null;
  10.                 BufferedWriter bufw = null;

  11.                 try{
  12.                         File fileInput=new File("Test1.java");
  13.                         if (!fileInput.exists()) {//如果文件不存在
  14.                                                 fileInput.createNewFile();//则创建文件
  15.                                         }
  16.                         File fileOutput=new File("Test1_bak.java");
  17.                         if (!fileOutput.exists()) {//同上
  18.                                                 fileOutput.createNewFile();
  19.                                         }
  20.                         //将文件读取流对象传入缓冲区内
  21.                         bufr = new BufferedReader(new FileReader(fileInput));
  22.                         
  23.                         
  24.                         //将文件写入流对象传入缓冲区内        
  25.                         bufw = new BufferedWriter(new FileWriter(fileOutput));

  26.                         String line = null;
  27.                
  28.                         //调用BufferedReader的readLine方法 读取数据
  29.                         while((line = bufr.readLine())!=null){
  30.                                 //调用BufferedWriter的Write方法 写入数据
  31.                                 bufw.write(line);
  32.                                 //换行
  33.                                 bufw.newLine();
  34.                                 //将缓冲区内的字符刷新到目的文件中去
  35.                                 bufw.flush();
  36.                         }
  37.                 }
  38.                 catch (IOException e){
  39.                         throw new RuntimeException("文件读取失败");
  40.                 }finally {
  41.                         //关闭读取流
  42.                         try {
  43.                                 if(bufr!=null)
  44.                                    bufr.close();               
  45.                            
  46.                         }catch (IOException e){
  47.                                 throw new RuntimeException("文件读取流关闭失败");
  48.                         }try {
  49.                                 // 关闭写入流
  50.                                 if(bufw!=null)
  51.                                         bufw.close();
  52.                         }catch (IOException e){
  53.                                 throw new RuntimeException("文件写入流失败");
  54.                         }
  55.                 }
  56.         }
  57. }
复制代码

作者: 黑马伍哲沂    时间: 2013-6-8 09:16
catch (IOException e){
                        throw new RuntimeException("文件读取失败");
                }
可以在这两行代码中间加上
e.printStackTrace(); 就能很明白的看到异常原因。
作者: 阳丹    时间: 2013-6-8 14:02
peerless2012 发表于 2013-6-8 09:03
楼主在new File()之后没有判断文件是否存在

修改如下:

加了 判断文件是否存在 确实好些
作者: 阳丹    时间: 2013-6-8 14:04
黑马伍哲沂 发表于 2013-6-8 09:16
catch (IOException e){
                        throw new RuntimeException("文件读取失败");
         ...

这样子啊
作者: 不破大地    时间: 2013-6-8 15:01
首先得保证你要读取的文件是已经存在的。
其次你得判断文件Test1.java是否为文本文件,如果是的话,就直接 bufr = new BufferedReader(new FileReader("Test1.java"));
如果不是文本文件,则需转换: bufr = new BufferedReader(new FileInputStreamReader(new FileInputStream("Test1.java")));
转换后,bufw也要随着转换。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2