Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13863
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-19 15:06
个人简介

我就是我,走自己的路!

文章分类

全部博文(9)

分类: Java

2013-09-26 12:54:35

背景:从网上下载学习视频时,有些压缩包内含有一些广告信息。当下载多个视频时,会出现相同的广告文件。为了避免冗余,减少磁盘占用,我将同一系列的学习视频移动到同一个文件夹下,覆盖相同的广告文件,并删除多余的空文件夹。

实例代码:
1、帮助类
  1. package com.junfu.move.util;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.List;

  8. /**
  9.  * 对文件的公共操作
  10.  * @author King
  11.  *
  12.  */
  13. public class FileUtil {
  14.     
  15.     private static ArrayList<File> list = new ArrayList<File>();    //存储文件
  16.     private static ArrayList<File> emptys = new ArrayList<File>();    //存储空文件夹
  17.     
  18.     /**
  19.      * 将文件从一个文件夹移动到另一个文件夹下
  20.      * @param src    源文件夹
  21.      * @param dst    目标文件夹
  22.      */
  23.     public static boolean move(File src, File dst){
  24.         
  25.         if(!src.exists()){
  26.             return false;
  27.         }
  28.         
  29.         if(!dst.exists()){
  30.             dst.mkdirs();
  31.         }
  32.         
  33.         //移动文件
  34.         ArrayList<File> list2 = files(src);
  35.         if(list2 != null){
  36.             for(File file : list2){
  37.                 String name = file.getName();
  38.                 String path = dst.getAbsolutePath();
  39.                 File newFile = new File(path + File.separator + name);
  40.                 boolean result = copy(file, newFile);
  41.                 if(result)
  42.                     file.delete();
  43.             }
  44.         }
  45.         
  46.         deleteEmptyFile(src);
  47.         
  48.         return true;
  49.     }
  50.     
  51.     /**
  52.      * 复制文件,即将文件复制到另一个目录下
  53.      * @param srcFile    源文件
  54.      * @param dicFile    目标文件
  55.      */
  56.     public static boolean copy(File srcFile, File dicFile){
  57.         FileInputStream fis = null;
  58.         FileOutputStream fos = null;
  59.         
  60.         try {
  61.             fis = new FileInputStream(srcFile);
  62.             fos = new FileOutputStream(dicFile);
  63.             
  64.             int len = 0;
  65.             byte[] buff = new byte[1024];
  66.             while((len = fis.read(buff)) != -1){
  67.                 fos.write(buff, 0, len);
  68.                 fos.flush();
  69.             }
  70.         } catch (IOException e) {
  71.             e.printStackTrace();
  72.             return false;
  73.         }finally{
  74.             //关闭读取流资源
  75.             if(fis != null){
  76.                 try {
  77.                     fis.close();
  78.                 } catch (IOException e) {
  79.                     fis = null;
  80.                 }
  81.             }
  82.             //关闭写入流资源
  83.             if(fos != null){
  84.                 try {
  85.                     fos.close();
  86.                 } catch (IOException e) {
  87.                     fos = null;
  88.                 }
  89.             }
  90.             
  91.         }
  92.         
  93.         return true;
  94.     }
  95.     
  96.     
  97.     public static void deleteEmptyFile(File file){
  98.         List<File> emptyFiles = emptyFiles(file);
  99.         if(emptyFiles != null){
  100.             for(File file2 : emptyFiles){
  101.                 file2.delete();
  102. //                System.out.println("删除 " + file2.getName() + " 成功!"); //使用日志记录
  103.             }
  104.         }
  105.     }
  106.     
  107.     /**
  108.      * 获取文件列表
  109.      * @param file 目录或文件
  110.      * @return
  111.      */
  112.     public static ArrayList<File> files(File file){
  113.         if(file.isFile()){
  114.             list.add(file);
  115.         }else{
  116.             File[] files = file.listFiles();
  117.             for(File file2 : files){
  118.                 if(file2.isFile()){
  119.                     list.add(file2);
  120.                 }else{
  121.                     files(file2);
  122.                 }
  123.             }
  124.         }
  125.         
  126.         return list;
  127.     }
  128.     
  129.     /**
  130.      * 获取指定目录下的空文件夹集合
  131.      * @param dic    目录
  132.      * @return
  133.      */
  134.     public static List<File> emptyFiles(File dic){
  135.         
  136.         if(dic.exists() && dic.isDirectory()){
  137.             if(!isEmpry(dic)){
  138.                 File[] files = dic.listFiles();
  139.                 for(File file : files){
  140.                     if(file.isDirectory()){
  141.                         if(isEmpry(file)){
  142.                             emptys.add(file);
  143.                         }else{
  144.                             emptyFiles(file);
  145.                         }
  146.                     }
  147.                 }
  148.             }
  149.         }
  150.         
  151.         return emptys;
  152.     }
  153.     
  154.     /**
  155.      * 判断文件夹是否为空
  156.      * @param file 文件夹
  157.      * @return
  158.      */
  159.     public static boolean isEmpry(File file){
  160.         
  161.         if(file.exists() && file.isDirectory()){
  162.             if(file.listFiles().length == 0)
  163.                 return true;
  164.         }
  165.         
  166.         return false;
  167.     }
  168. }


2、测试类

  1. package com.junfu.move.test;

  2. import java.io.File;
  3. import com.junfu.move.util.FileUtil;

  4. /**
  5.  * 对移动文件进行测试
  6.  * @author King
  7.  *
  8.  */
  9. public class MoveTest {

  10.     public static void main(String[] args) {
  11.         //删除空文件夹
  12. //        FileUtil.deleteEmptyFile(new File("F:/project/test/1"));
  13.         
  14.         //移动文件
  15.         FileUtil.move(new File("F:/project/test/1"), new File("F:/project/test/2"));
  16.     }
  17. }
阅读(334) | 评论(0) | 转发(0) |
0

上一篇:JSP---初探

下一篇:九九乘法表

给主人留下些什么吧!~~