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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

文件夹的复制和文件的遍历主要原理是:先遍历源文件夹里面的所有文件和文件夹,并保存到一个文件路径数组中,然后循环这个数组,如果是文件就用FileInputStream和FileOutputStream类来实现复制功能,如果是文件夹,则用递归方法递归遍历里面的文件和文件夹,

主要的实现方法是用File类的API来遍历要操作文件和文件夹,



具体怎么用,我写了一个小测试代码级大家看吧,我再在代码里面写一点注释,告诉大家怎么用就好了
代码如下:
  1. //
  2. import java.io.*;

  3. class FileMove
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 try{
  8.                 //传入两个文件夹路径,其中在Windows中使用的分隔符是"\\"
  9.                 CopyFile("D:\\5555","D:\\1234");
  10.                 }
  11.                 catch(Exception ex){}
  12.                 System.out.println("Copy File is over!");
  13.        
  14.         }
  15.        
  16.         //复制文件夹的方法,开始的时候是两个文件夹
  17.         public static void CopyFile(String source,String destin) throws Exception //在这里直接抛出各种异常,就不一一处理了
  18.         {
  19.                 File path1=new File(source);
  20.                 File path2=new File(destin);
  21.                
  22.                 //如果源目录不存在,那就不用复制了,
  23.                 if(path1.exists())
  24.                 {
  25.                         //Create destination folder,如果目标目录不存在,就创建目标目录,因为没有目录文件复制不过去的
  26.                         if(!path2.exists())
  27.                         {
  28.                                 path2.mkdirs();
  29.                         }
  30.                        
  31.                         //取得源目录下面的所有文件和文件夹
  32.                         File[] items=path1.listFiles();
  33.                         FileInputStream fis=null;
  34.                         FileOutputStream fos=null;
  35.                        
  36.                         //取得所有文件和文件夹之后,遍历处理,如果是文件,就复制文件,如果是文件夹,则递归文件夹下面的文件和文件夹
  37.                         for(File item:items)
  38.                         {
  39.                                 //如果是文件才进行复制
  40.                                 if(item.isFile())
  41.                                 {
  42.                                     //输入输出流的两个常用构造函数,其中在用来了一个字段File.separator,先用输入流读取文件,然后用输出流写文件到目标位置,完成复制功能
  43.                                         fis=new FileInputStream(item);
  44.                                         fos=new FileOutputStream(path2+File.separator+item.getName());
  45.                                         byte[] b=new byte[1024];
  46.                                         for(int i=0;(i=fis.read(b))!=-1;)
  47.                                         {
  48.                                                 fos.write(b,0,i);
  49.                                                 fos.flush();
  50.                                         }
  51.                                        
  52.                                         //close the Stream关闭资源啊,什么异常处理的就不写,自己补上吧
  53.                                         fos.close();
  54.                                         fis.close();                                       
  55.                                
  56.                                 }
  57.                                 //如果是文件夹,递归文件夹
  58.                                 else
  59.                                 {
  60.                                         CopyFile(item.getPath(),path2+File.separator+item.getName());
  61.                                 }
  62.                         }                       
  63.                 }
  64.                 else
  65.                 {
  66.                         System.out.println("source path:"+source+" is not exists!");
  67.                 }               
  68.         }
  69. }
  70. //
复制代码

当然,为了方便大家看代码理解,异常处理就是能少就少了,大家在实际应用的时候切记写好异常处理代码哦,

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马