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

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

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);
 }
}

时间: 2024-11-01 15:04:04

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

antlr g文件-java中如何加载后缀为g的语法文件?

问题描述 java中如何加载后缀为g的语法文件? 我是在netbeans7.4下开发的,java版本为jdk1.7.0_51.在类文件中引用了两个类,分别是 JSHOP2Lexer和JSHOP2Parser,而这两个类是在一个JSHOP.g的文件中定义的,这个文件已经导入,但是属性显示不能识别,在我的类文件中也显示这两个类"找不到符号". 请问在netbeans中如何导入.g文件中定义的类呢? JSHOP.g文件是用基于antlr.jar写的语法文件,是JSHOP2项目的(http:/

java中有关sleep的问题,头都大了,希望各位大神抽时间帮忙看看

问题描述 java中有关sleep的问题,头都大了,希望各位大神抽时间帮忙看看 public class ThreadIncludeFor extends Thread{ public ThreadIncludeFor(String name){ super(name); } public synchronized void run(){ for(int i=0;i<3;i++){ System.out.println(Thread.currentThread().getName()+ "

Java中的字符集编码入门(四) 网页文件的编码

接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三个地方保持编码的一致:网页文件,网页编码声明和浏览器编码设置. 首先是网页文件本身的编码,即网页文件在被创建的时候使用什么编码来保存.这个完全取决于创建该网页的人员使用了什么编码保存,而进一步的取决于该人员使用的操作系统.例如我们使用的中文版WindowsXP系统,当你新建一个文本文件,写入一些内容,并按下ctrl+s进行保存的那一刻,操作系统就替你使用GBK编码将文件进行了保存(没有使用UTF-8,也没有使用UTF-16).而使用了

java中如何将数据保存为txt、xml文件并上传到oracle数据库中 非常感谢!

问题描述 我想写一段代码,将一堆数据保存为一般文件,纪录式文件,xml文件,然后上传到oracle数据库中,因为之前没有到过类似的开发,所以无从开始,跪求帮忙了 解决方案 解决方案二:也许你可以baidu.google下,应该能找到很多例子,祝你好运!java读写xml文件如下:解决方案三:就是最基本的IO文件操作和JDBC操作.记得Oracle上用CLOB字段类型来保存大文本.解决方案四:引用2楼magong的回复: 就是最基本的IO文件操作和JDBC操作.记得Oracle上用CLOB字段类型

java中通过网卡名称获取IP地址_java

复制代码 代码如下: package me.xuzs.sso.test; import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.util.Enumeration; public class InternetTest {     public static void main(String[] args) {        String net

举例详解Java中的访问权限修饰符_java

访问权限符:(1)public: 对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中. 对于类来说:    也是一样.(2)friendly: 对于成员老说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注 意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已.同一个包内其它类可以访问,但包外 就不可以.对于同一个文件夹下的.没有用package的classes,Java会自动将这些classes初见为隶属于该

在Java中使用下划线分隔数的字面值的用法讲解_java

在Java SE 7中新增了以二进制形式的字面值表示方式,你可以像使用十进制一样,方便地使用二进制形式的字面值来表示数值. 例如: // 一个8位的byte值: byte aByte = 0b100001; // 一个16位的short值: short aShort = 0b1010010100101; // 一个32位的int值: int anInt1 = 0b101000010100010110100101000101; // 一个64位的long值(注意末尾的后缀「L」) long aLo

区分java中String+String和String+char_java

我们来考虑一个关于java中String的问题: "abc" + '/'和 "abc" + "/"的区别. 通过这个例子, 我们可以顺便练习一下JDK工具中javap的用法, 原问题是这样的: 把斜杠/当作字符或字符串有什么区别呢? 一个是当作基本数据类型char,一个是对象String.具体有什么区别呢? 当作字符效率会更高吗?String str = "abc" + '/';和String str = "abc&

java中的问题关于JOptionPane

问题描述 java中的问题关于JOptionPane "JOptionPane.showConfirmDialog(null, "数据文件不存在或打开出错,是否选择其他文件?") == JOptionPane.YES_OPTION)"是什么意思? 解决方案 选择yes,就是选择其他文件,当reponse=JOptionPane.YES_OPTION时,你要实现以上操作