Java 中按文件名称分类,按文件大小分类,按照文件类型分类,按照最后修改时间分类的工具类

简介: 在此博客中用到了文件操作的工具类,可以连接Java中实现复制文件到文件,复制文件到文件夹,复制文件夹到文件,删除文件,删除文件夹,移动文件,移动文件夹的工具类package cn.edu.hactcm.cfcms.utils;import java.io.File;import java.util.HashSet;import java.util.Set;import javax.sw

在此博客中用到了文件操作的工具类,可以连接

Java中实现复制文件到文件,复制文件到文件夹,复制文件夹到文件,删除文件,删除文件夹,移动文件,移动文件夹的工具类

package cn.edu.hactcm.cfcms.utils;

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JOptionPane;
/**
 * 文件分类中用到的所有工具类
 * CFMS    :Computer files management system 
 * version :1.0 2013-3-3 上午02:28:40
 */
public class ClassifyFolderUtils {

 /**
  * 在from 这个文件夹里创建 innerFolderName 这个文件夹,如果前者内部的文
  * 件中包含关键字innerFolderName,那么把文件拷贝到innerFolderName文件夹里面去
  *
  * @param innerFolderName
  * @param from
  */
 public static void NameClassify(String innerFolderName,String from){
  File fromFile = new File(from);
  
  //如果选中的文件夹是一个文件夹,那么将不做任何操作
  if (from.isEmpty()) {
   return;
  } else {
   //获得文件里面的所有文件
   File[] listFiles = fromFile.listFiles();
   
   //如果选中的文件不是空文件,在这个文件里面创建要分类的文件
   String newPath = from + File.separator + innerFolderName;
   File newFile = new File(newPath);
   
   for (int i = 0; i < listFiles.length; i++) {
    if (listFiles[i].isDirectory()) {
     //判断这个文件夹中是否有这个关键字,如果有的话就拷贝目录了到制定目录内了。
     if (listFiles[i].getName().indexOf(innerFolderName) != -1) {
      //获得这个文件夹的名称,在指定的文件内创建这个目录
      if (!newFile.exists()) {
       newFile.mkdir();
      }
      
      FileOperationUtils.copyFolder2Folder(listFiles[i].getPath(), newPath);
     } else {//如果没有就跳出这个循环
      continue;
     }
    } else {
     //判断这个文件是否含有名称关键字
     if (listFiles[i].getName().indexOf(innerFolderName) != -1) {
      String destFilePath = newPath + File.separator + listFiles[i].getName();
      if (!newFile.exists()) {
       newFile.mkdir();
       
      }
      FileOperationUtils.copyFileToFile(listFiles[i].getPath() , destFilePath);
     } else {
      continue;
     }
    }
   }
  }
  JOptionPane.showMessageDialog(null, "操作成功,请查看指定目录!","提示消息",JOptionPane.WARNING_MESSAGE);
 }
 
 public static void TypeClassify(String path){
  File destFile = new File(path);
  //判断是否是文件夹,文件夹是否为空
  if (destFile.isFile()) {
   JOptionPane.showMessageDialog(null, "对不起,不能对文件进行按类型分类,请填写文件夹路径");
   return ;
  }
  
  if (!destFile.exists()) {
   JOptionPane.showMessageDialog(null, "对不起,所指定文件夹不存在");
   return ;
  }
  
  typeOperation(path, destFile);
  
  //提示消息
  JOptionPane.showMessageDialog(null, "操作成功,请查看指定目录!","提示消息",JOptionPane.WARNING_MESSAGE);
 }

 /**
  * @param path
  * @param destFile
  */
 private static void typeOperation(String path, File destFile) {
  File[] listFiles = destFile.listFiles();
  if (listFiles.length == 0) {
   return ;
  }
  
  //条件都成立了的话,就在这个路径下面创建一个文件
  String newPath = path + File.separator + "这里存放的是按照类型分类之后的文件所在位置";
  File newFile = new File(newPath);
  if (!newFile.exists()) {
   newFile.mkdirs();
  }
  
  Set<String> typesSet = new HashSet<String>();
  for (File file2 : listFiles) {
   if (file2.isDirectory()) {
    //进行递归
    typeOperation(path, file2);
   } else {
    String filePath = file2.getPath();
    //截取后缀名
    String suffix = filePath.substring(filePath.lastIndexOf(".") + 1,filePath.length());
    //文件类型文件夹所在的位置
    String newTypePath = newPath + File.separator + suffix;
    //使用set集合存储后缀名,让这些重复的后缀名只存在一次,如果没有才存入这个结合中
    if (!typesSet.contains(suffix)) {
     typesSet.add(suffix);
     //在新创建的文件夹里面创建这个后缀名命名的文件夹。
     new File(newTypePath).mkdir();
    }
    
    FileOperationUtils.copyFile2Folder(file2.getPath(), newTypePath);
   }
  }
 }
 
 /**
  * 按大小分类
  * @param sizeNameValue :按名称分类的文件名称
  * @param folderPath    : 对那个文件夹进行按照大小分类
  * @param min           : 文件最小值
  * @param max           : 文件最大值
  * @param unit1         : 最小值的单位
  * @param unit2         : 最大值的单位
  */
 public static void SizeClassify(String sizeNameValue, String folderPath,
   String min, String max, String unit1, String unit2) {
  boolean b = DataValidate.validate(min, max);
  if (!b) {
   return;
  } else {
   Integer minValue = Integer.parseInt(min);
   Long minSize = FileInfoUtils.judgeUnit(unit1)*minValue;
   Integer maxValue = Integer.parseInt(max);
   Long maxSize = FileInfoUtils.judgeUnit(unit2)*maxValue;
   
   String newPath = folderPath + File.separator + sizeNameValue;
   File newFile = new File(newPath);
   if (!newFile.exists()) {
    newFile.mkdir();
   }
   
   //开始按照大小分类
   File fromFile = new File(folderPath);
   File[] listFiles = fromFile.listFiles();
   //判断这个文件夹里面是否有文件,如果有文件才可以,否者直接返回
   if (listFiles.length > 0) {
    for (File file : listFiles) {
     long fileSize = FileInfoUtils.getFileSize(file.getPath());
     if (fileSize > minSize && fileSize < maxSize) {
      FileOperationUtils.copyFileInAllType(file.getPath(), newPath);
     }
    }
   } else {
    JOptionPane.showMessageDialog(null, "对不起,你选中的文件夹为空!","提示信息",JOptionPane.WARNING_MESSAGE);
    return ;
   }
  }
  //提示消息
  JOptionPane.showMessageDialog(null, "操作成功,请查看指定目录!","提示消息",JOptionPane.WARNING_MESSAGE);
 }
 
 /**
  * 按照时间分类
  * @param sizeNameValue  :时间分类的名称
  * @param folderPath     : 这是一个文件夹路径,指定要对那个文件进行操作
  * @param datetime1      : 这是时间点一
  * @param datetime2      : 这是时间点二
  */
 public static void TimeClassify(String timeNameValue, String folderPath,
   String datetime1, String datetime2) {
  //获得两个时间的时间毫秒值
  long time1 = new DateFormatUtils().getMillisecondsByTimeString(datetime1);
  long time2 = new DateFormatUtils().getMillisecondsByTimeString(datetime2);
  long timeMax = (time1 > time2) ? time1 : time2;
  long timeMin = (time1 > time2) ? time2 : time1;
  if (time1 == time2) {
   JOptionPane.showMessageDialog(null, "对不起,两个时间的值不能相同!","提示消息",JOptionPane.WARNING_MESSAGE);
   return;
  }
  
  // 判断这个文件夹里面是否有文件,如果没有文件,那么就返回
  File file = new File(folderPath);
  File[] listFiles = file.listFiles();
  if (listFiles.length == 0) {
   return;
  }
  // 如果有文件,创建文件夹,然后执行其他的工作
  String newPath = folderPath + File.separator + timeNameValue;
  File newFile = new File(newPath);
  if (!newFile.exists()) {
   newFile.mkdir();
  }
  
  for (File file2 : listFiles) {
   long lastModifiedTime = file2.lastModified();
   if (lastModifiedTime <= timeMax && lastModifiedTime >= timeMin) {
    FileOperationUtils.copyFileInAllType(file2.getPath(), newPath);
   }
  }
  //提示消息
  JOptionPane.showMessageDialog(null, "操作成功,请查看指定目录!","提示消息",JOptionPane.WARNING_MESSAGE);
 }
}

目录
相关文章
|
5月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
259 1
|
8月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
8月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
252 0
|
8月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
614 0
|
8月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
397 14
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
293 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
312 1
|
6月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
281 0
|
6月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
458 16