迭代某一目录下的所有目录及文件

时间:2021-09-09 02:28:12

今天占地方,明天补上...

补上了...嘻嘻,都是最基础的,没定太多的注释

package src;
/**
 * 循环某一目录中的所有目录及文件,并将其目录及文件外列出
 */
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ListFile{
 /**
  * 函数的递归调用
  * 区分当前所读内容为目录还是文件,如果是文件则走else分支,如果是目录则走if分支
  * if分支为目录的处理,此种情况下调用该函数本身,进行递归处理,否则走else分支
  * @param file
  */
     public static void analysis(String file){
      //创建文件句柄
      File f =new File(file);
      //获取文件及目录列表数组
      File[] fileInF = f.listFiles();
     // 对当前的文件句柄内容进行判断,如为目录走if分支,否则走else分支
      if(f.isDirectory()==true){
       //如为目录,则对当前目录下的内容进行迭代处理,依次区分是为目录还是文件,通过递归调用自身实现,当调用到某一目录时该目录下如果都是文件情况下结束。
       for(File filea : fileInF){
        //输出当前目录名称
        System.out.println("目录"+filea);
        //对当前目录下内容递归调用
        analysis(filea.toString());
       }
       //analysis(filea.toString());
      }else{
       //对为文件情况的处理,比如说文件名、路径等的输出,文件的拷贝等
       //文件名称的输出
//       System.out.println("文件:"+f.getName());
       //此句是我对文件名称的解析处理,此种文件名的格式为AAA_BBB.XXX,具体意义不作说明
//       System.out.println(f.getName()+"=="+f.getName().split("_")[1]+"=="+f.getName().split("_")[1].substring(0,f.getName().split("_")[1].indexOf(".jpg"))+"=="+f.getName().split("_")[1].indexOf(".jpg"));
      //作的拼接SQL语句的处理
       System.out.println("update nxt_xz_content set c_img='"+f.getName()+"' where c_level=2 and c_column=1 and  c_city='"+f.getName().split("_")[1].substring(0,f.getName().split("_")[1].indexOf(".jpg"))+"'");
             //对文件的拷贝
       try {
    copySingleFile(f.toString(), f.getName().toString(), "d:/4/20110831_");
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
      }
     // }
     }
    
     /**
   * 文件复制业务逻辑实现
   * @param srcFileName 源文件名
   * @param destFileName 目标文件名
   * @param rootPath 文件所操作路径
    *           
   * @return
    * @throws IOException
   * @throws FileNotFoundException
   */
  public static void copySingleFile(String srcFileName, String destFileName,String rootPath) throws FileNotFoundException,IOException {

  // 目标文件
   File destFile = new File(rootPath +destFileName);
   // 源文件
   File srcFile = new File( srcFileName);
   /** 源文件文件流取得 */
   InputStream is = new FileInputStream(srcFile);

   /** 输入文件流缓存取得 */
   BufferedInputStream inBuffer = new BufferedInputStream(is);

   /** 目标文件文件保存流取得 */
   FileOutputStream out = new FileOutputStream(destFile);

   /** 目标文件文件保存流缓存取得 */
   BufferedOutputStream outBuffer = new BufferedOutputStream(out);

   /** 复制文件保存 */
   int contents = 0;

   while ((contents = inBuffer.read()) != -1) {
    outBuffer.write(contents);
   }

   outBuffer.flush();

   // 文件流关闭
   inBuffer.close();
   outBuffer.close();
  }


     public static void main(String[] args){
      //方法调用
      analysis("d:/3");
     }
}