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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 bingdian107 于 2015-12-12 02:41 编辑

在做IO流的一个测试时,碰到一个难题,代码如下
  1. package cn.itcast_02;

  2. import java.io.File;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;

  6. /*
  7. * 需求:复制指定目录下的指定文件,并修改后缀名。
  8. * 指定的文件是:.java文件。
  9. * 指定的后缀名是:.jad
  10. * 指定的目录是:jad
  11. *
  12. * 数据源:f:\\java\\A.java
  13. * 目的地:f:\\jad\\A.jad
  14. 分析:
  15. A:封装目录
  16. B:把目录中的对象转换为File集合
  17. C:遍历集合得到每个File对象,并判断该对象是文件还是文件夹
  18. 文件:判断是否是以.java结尾
  19. 是:复制文件到指定目录
  20. 不是:不用管
  21. 文件夹:继续封装
  22. 由此可见,是一个递归的思想
  23. */
  24. public class CopyFloder {

  25.         public static void main(String[] args) throws IOException {

  26.                 // 写一个方法实现复制指定文件
  27.                 //首先判断目标文件夹是否存在,如果不存在则创建
  28.                 File dest =new File("f:\\jad");
  29.                 if(!dest.exists()){
  30.                         dest.mkdir();
  31.                 }
  32.                 copy("f:\\java",dest);
  33.                
  34.         }

  35.         public static void copy(String src, File dest) throws IOException  {
  36.                 // 封装目录
  37.                 File file = new File(src);
  38.                 // 把目录转换为File数组
  39.                 File[] fileArray = file.listFiles();
  40.                 // 遍历数组得到每个File对象
  41.                 for (File f : fileArray) {
  42.                         //判断该对象是否是文件,如果是文件再继续判断是否以.java结尾
  43.                         if(f.isFile()){
  44.                                 if(f.getName().endsWith(".java")){
  45.                                         //如果文件是以.java结尾,把文件复制到目标位置
  46.                                        
  47.                                         //封装数据源
  48.                                         FileReader fr = new FileReader(f);
  49.                                         //封装目的地
  50.                                         FileWriter fw = new FileWriter(dest);//报错Exception in thread "main" java.io.FileNotFoundException: f:\jad (拒绝访问。)
  51.                                         //复制文件,每次复制一个字节数组
  52.                                         char[] chs = new char[1024];
  53.                                         int len;
  54.                                         while((len=fr.read(chs))!=-1){
  55.                                                 fw.write(chs, 0, len);
  56.                                         }
  57.                                         //释放资源
  58.                                         fr.close();
  59.                                         fw.close();
  60.                                 }
  61.                         }else{
  62.                                
  63.                                 //如果不是文件,再继续封装后判断
  64.                                 //因为此时的f是File对象,而方法copy的参数需要使用String,所以这里需要用到f的绝对路径
  65.                                 String ss = f.getAbsolutePath();
  66.                                 copy(ss,dest);
  67.                         }
  68.                 }
  69.         }
  70. }
复制代码
这里只写到了复制的代码,改名的代码还没有写。
报错的地方已经标明,目标目录我已经创建了,为什么提示无法访问呢。这个错误应该怎么解决?

2 个回复

倒序浏览
你那个dest只是一个路径,没有文件名.后缀名,不是一个文件,所以打不开,建议建一个文件demo.txt
回复 使用道具 举报
魏志林 发表于 2015-12-12 11:29
你那个dest只是一个路径,没有文件名.后缀名,不是一个文件,所以打不开,建议建一个文件demo.txt ...

恩,是的。忽略了,真够弱智的了。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马