A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

也就是18天那个代码,为什么我运行的抛出异常,而不是我需要的结果呀。
哦米豆腐。帮我的都是好人,好基友,好丽友。
代码如下:
/*
需求,从C盘拷贝一个文件到D盘
1:在D盘创建一个文件。用于储存C盘文件中的数据
2:定义读取流和C盘文件关联
3:通过不断的读写完成数据的存数
4:关闭资源。
*/


import java.io.*;
class CopyText
{
public static void main(String[] args)
{
  copy();
}
public static void copy()
{
  FileWriter fw = null;
  FileReader fr= null;
   try
   {
    fw=new FileWriter("DateDemo_copy.txt");
    fr=new FileReader("DetaDemo.java");
   
    char[] buf= new char[1024];
    int len=0;
     while((len=fr.read(buf))!=-1)
    {
     fw.write(buf,0,len);
    }
   }
   catch (IOException e)
   {
    throw new RuntimeException("读写失败");
   }
   finally
  {
   try
   {
    if(fr!=null)
     fr.close();
   }
   catch (IOException e)
   {
   }
   try
   {
    if(fw!=null)
     fw.close();
   }
   catch (IOException e)
   {
   }
   }
}
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

7 个回复

正序浏览
方江 中级黑马 2012-4-17 17:04:31
8#
大哥大姐们。我路径是在默认目录下运行的,而且路径下面有DateDemo.java这个文件。
第二个。别人说我抛出的异常有问题,这是在18天最后面那个练习题里面的,老毕是这样抛得,如果还有高深的抛法。我没学到啊,亲。
我回去再看下,希望是路径问题,可能没有class这个文件,但DateDemo和DateDemo_Copy.txt这个文件是肯定有的。
回复 使用道具 举报
//读取整个数组,然后把整个数组复制到D盘。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyTest2 {
        public static void main(String[] args) {
                FileWriter fw = null;
                FileReader fr = null;
                try {
                        fw = new FileWriter("D:\\WaterPress.txt");
                        fr = new FileReader("C:\\WaterPress.txt");

                        int num = 0;
                        char[] buf = new char[1024];

                        while ((num = fr.read(buf)) != -1) {
                                fw.write(buf, 0, num);
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } finally {
                        try {
                                fr.close();
                                fw.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }

                }

        }
}
用决定路径试试。(系统找不到指定的文件。)
回复 使用道具 举报
对啊,我看了一下,你的程序,文件路径错了。而且,为什么不用缓冲流啊,对取快,也方便啊。
回复 使用道具 举报

  1. import java.io.*;
  2. class CopyText
  3. {
  4. public static void main(String[] args)
  5. {
  6. copy();
  7. }
  8. public static void copy()
  9. {
  10. FileWriter fw = null;
  11. FileReader fr= null;
  12. try
  13. {
  14. File file = new File("E:\\DateDemo_copy.txt");
  15. file.createNewFile();
  16. fw=new FileWriter(file);
  17. fr=new FileReader("DetaDemo.java");

  18. char[] buf= new char[1024];
  19. int len=0;
  20. while((len=fr.read(buf))!=-1)
  21. {
  22. fw.write(buf,0,len);
  23. }
  24. } catch (IOException e)
  25. {
  26. System.out.println(e);
  27. } finally
  28. {
  29. try
  30. {
  31. if(fr!=null)
  32. fr.close();
  33. }
  34. catch (IOException e){}
  35. try
  36. {
  37. if(fw!=null)
  38. fw.close();
  39. }catch (IOException e){}
  40. }
  41. }
  42. }
复制代码
对于绝对路径和相对路径的问题,我刚刚做了个实验
首先,使用绝对路径肯定是没有问题的。
java程序在执行的时候遇到相对路径的时候,它会找class文件所在的目录,如果找不到,就会抛出FileNoFoundException.
如果是在Eclipse下开发,相对路径应该是bin目录,而不是src目录

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
  fw=new FileWriter("DateDemo_copy.txt");
     fr=new FileReader("DetaDemo.java");
按照你的描述 ,可能是关联的文件名 写错了,fw=newFileWriter("D:DateDemo_copy.txt")
                                    fr=new FileReader("C:DetaDemo.java");
还要看你的C盘里有没有DetaDemo.java这个文件。么有的话也是会抛异常的

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
我先给你提个人意见吧
1.  你没有理解清题目的要求,题目要你从C盘拷贝文件到D盘,你的路径上都体现不出这两个盘符
2.  我觉得你的异常处理方式不行,第一次异常catch以后你抛出一个“文件读取失败”,你自己在修改程序的时候你自己怎么根据这个“文件读取失败”这一条信息来找你程序的错误???这句话我觉得应该是打印给客户看的,但个人认为现在学习阶段没必要这样处理。还有你后面,catch住异常然后就没然后了......然后出问题肯定找不出来。我建议吧,出了异常先打印出来,然后有问题你就知道去哪儿找了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
代码没错,主要是文件路径问题,如果你直接用命令行编译运行没问题,如果你是放在Eclipse中运行的话,你试试绝对路径就行了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马