黑马程序员技术交流社区

标题: 递归实现文件拷贝 [打印本页]

作者: 微笑=.一瞬间    时间: 2014-4-28 10:53
标题: 递归实现文件拷贝
看完毕老师的视频 用递归实现了把一文件夹下所有文件内容拷贝到另一文件中
基本功能已经实现了就是在拷贝过程中遇到了 禁止访问的文件怎么解决啊(查阅了api 貌似没有解决这种问题的方法)请大神指导
代码如下:import java.io.*;
class FileDemo2
{
        public static void main(String[] args)throws Exception
        {
                File f=new File("F:\\");//我的F盘中也个拒绝访问的文件 现在想跳过该文件继续访问其他文件
                show(f);
        }
        public static void show(File f)throws Exception
        {
                File[] files=f.listFiles();
               
                for(int i=0;i<files.length;i++)
                {
                        if(!files[i].isHidden()&&files[i].isDirectory())
                                show(files[i]);
                        else
                        {
                                InputStream ins=new FileInputStream(files[i]);
                                OutputStream os=new FileOutputStream("iiiiiiiiiii.doc",true);
                                int ch;
                                while((ch=ins.read())!=-1)
                                {
                                        os.write(ch);
                                }
                        }
                               

                }
        }
}

程序运行结果图如下:

360软件小助手截图20140428105258.png (5.3 KB, 下载次数: 13)

360软件小助手截图20140428105258.png

作者: SyouRai_Tsk    时间: 2014-4-28 11:37
把异常捕捉了.就可以继续执行内容
作者: 微笑=.一瞬间    时间: 2014-4-28 11:49
SyouRai_Tsk 发表于 2014-4-28 11:37
把异常捕捉了.就可以继续执行内容

可是 捕捉了异常 就去执行 异常中的代码了, 异常中代码执行完了程序 不就结束了吗?还怎么拷贝下面没有拷贝的文件呢?
作者: jzxyhjl    时间: 2014-4-28 16:23
本帖最后由 jzxyhjl 于 2014-4-28 16:29 编辑
  1. package test;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;

  7. public class CopyAllTest {

  8.         public static void main(String[] args) throws Exception {
  9.                 File f = new File("F:\\$RECYCLE.BIN");// 我的F盘中也个拒绝访问的文件 (这是个回收站)
  10. //                 File f = new File("F:\\Temp");//这个文件夹下是常规的文件
  11. //                 File f = new File(" E:\\System Volume Information");//这个文件夹拒绝访问
  12.                 show(f);
  13.         }

  14.         public static void show(File f) throws Exception {
  15.                 File[] files = f.listFiles();
  16.                 if(files!=null){
  17.                         
  18.                         for (int i = 0; i < files.length; i++) {
  19.                                 if (!files[i].isHidden() && files[i].isDirectory())
  20.                                         show(files[i]);
  21.                                 else {
  22.                                         System.out.println("开始..." + i);
  23.                                         try {
  24.                                                 InputStream ins = new FileInputStream(files[i]);
  25.                                                 OutputStream os = new FileOutputStream(
  26.                                                                 files[i].getName(), true);
  27.                                                 int ch;
  28.                                                 while ((ch = ins.read()) != -1) {
  29.                                                         os.write(ch);
  30.                                                 }
  31.                                                 System.out.println("成功..." + i);
  32.                                         } catch (Exception e) {
  33.                                                 System.out.println("文件"+files[i].getName()+"拒绝访问..."+i);
  34.                                                 continue;
  35.                                         }
  36.                                 }
  37.                         }
  38.                 }else{
  39.                         System.out.println("无法读取文件");
  40.                 }
  41.         }
  42. }
复制代码

楼上说的方法可以,使用捕获异常,然后使用continue继续。
不过要说一下,你的这个目录下是回收站,拒绝访问的原因是找不到指定名称的文件(你可以看一下打印出的文件名就明白为什么找不到了),可以通过catch捕获异常然后使用continue继续for循环。
这里还要说一下,当没有权限访问某个文件夹时,File[] files会是空的,这里要先判断一下在进行拷贝,而且我改变了拷贝后文件的名称(不能全是.doc啊),防止拷贝后无法打开文件。
作者: 微笑=.一瞬间    时间: 2014-4-28 20:07
jzxyhjl 发表于 2014-4-28 16:23
楼上说的方法可以,使用捕获异常,然后使用continue继续。
不过要说一下,你的这个目录下是回收站,拒绝访 ...

恩 谢谢




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