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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 微笑=.一瞬间 山林野马   /  2014-4-28 10:53  /  1906 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看完毕老师的视频 用递归实现了把一文件夹下所有文件内容拷贝到另一文件中
基本功能已经实现了就是在拷贝过程中遇到了 禁止访问的文件怎么解决啊(查阅了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

4 个回复

倒序浏览
把异常捕捉了.就可以继续执行内容
回复 使用道具 举报
SyouRai_Tsk 发表于 2014-4-28 11:37
把异常捕捉了.就可以继续执行内容

可是 捕捉了异常 就去执行 异常中的代码了, 异常中代码执行完了程序 不就结束了吗?还怎么拷贝下面没有拷贝的文件呢?
回复 使用道具 举报
本帖最后由 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啊),防止拷贝后无法打开文件。

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
jzxyhjl 发表于 2014-4-28 16:23
楼上说的方法可以,使用捕获异常,然后使用continue继续。
不过要说一下,你的这个目录下是回收站,拒绝访 ...

恩 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马