JavaSE文件操作工具类FileUtil详解

 更新时间:2019年08月30日 11:40:38   作者:谦玉  
这篇文章主要为大家详细介绍了JavaSE系列之文件操作工具类FileUtil,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了JavaSE文件操作工具类FileUtil的具体代码,供大家参考,具体内容如下

先展示一下文件工具类中打印文件夹树形结构的结果:

代码如下:

package com.mjq.iotest;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * 练习File API 
 * @author Administrator
 *
 */
public class FileUtil 
{
 /**
 * 单例模式
 *//*
 private static FileUtil instance = null;
 private FileUtil()
 {
 }
 public static FileUtil getInstance()
 {
 synchronized (FileUtil.class) 
 {
  if(null == instance)
  {
  instance = new FileUtil();
  }
 }
 return instance;
 }*/
 /**
 * 创建文件/文件夹
 * @param path 路径
 * @return 是否创建成功
 * @throws Exception 
 */
 public static boolean creatFile(String path) throws Exception
 {
 if(null == path || path.length() == 0)
 {
  throw new Exception("路径不正确!");
 }
 File file = new File(path);
 //如果路径存在,则不创建
 if(!file.exists())
 {
  if(file.isDirectory())
  {
  //文件夹
  file.mkdirs();
  // file.mkdir();  创建单层路径 file.mkdirs() 可以创建多层路径
  return true;
  }
  else
  {
  //文件  先创建父路径,然后再创建文件
  String dirPath = path.substring(0,path.lastIndexOf(File.separator));
  File dirFile = new File(dirPath);
  if(!dirFile.exists())
  {
   dirFile.mkdirs();
  }
  File fileFile = new File(path);
  try {
   fileFile.createNewFile();
   return true;
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
 }
 else
 {
  throw new Exception("文件已存在!");
 }
 return false;
 } 
 /**
 * 删除文件/文件夹及其中的所有子文件夹和文件
 * @return
 * @throws Exception 
 */
 public static void deleteFile(String filePath) throws Exception
 {
 if(null == filePath || filePath.length() == 0)
 {
  throw new Exception("filePath:"+filePath+"路径不正确!");
 }
 File file = new File(filePath);
 if(!file.exists())
 {
  throw new Exception("filePath:"+filePath+"文件不存在!");
 }
 if(file.isFile())
 {
  file.delete();
 }
 if(file.isDirectory())
 {
  File [] childFiles = file.listFiles();
  if(null != childFiles && childFiles.length!=0)
  {
  //循环递归删除
  for(File childFile:childFiles)
  {
   deleteFile(childFile.getAbsolutePath());
  }
  }
  file.delete();
 }
 }
 /**
 * 获取文件基本信息
 * @param file
 */
 public static void getBaseInfo(File file)
 {
 //文件绝对路径  文件大小  文件是否是文件夹   文件是否是文件   文件是否可读   文件是否可写      文件是否可执行     文件修改时间    文件父目录名
 //文件所在分区总大小  未使用大小  可用大小
 System.out.println("文件基本信息如下:");
 System.out.println("文件绝对路径:"+file.getAbsolutePath());
 System.out.println("文件名称:"+file.getName());
 System.out.println("文件大小:"+file.length());
 System.out.println("文件是否是文件夹:"+file.isDirectory());
 System.out.println("文件是否是文件:"+file.isFile());
 System.out.println("文件是否可读:"+file.canExecute());
 System.out.println("文件是否可读:"+file.canRead());
 System.out.println("文件是否可写:"+file.canWrite());
 System.out.println("文件修改时间:"+file.lastModified());
 System.out.println("文件父目录名称:"+file.getParent());
 System.out.println("文件所在分区大小:"+file.getTotalSpace()/1024/1024+"Mb");
 System.out.println("文件所在分区未使用大小:"+file.getFreeSpace()/1024/1024+"Mb");
 System.out.println("文件所在分区可用大小:"+file.getUsableSpace()/1024/1024+"Mb");
 System.out.println("文件夹结构如下图:");
 try {
  printFileStructure(file,1);
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
 /**
 * 打印文件路径
 * @param file
 * @param deepth
 * @throws Exception 
 */
 public static void printFileStructure(File file ,int deepth) throws Exception
 {
 if(!file.exists())
 {
  throw new Exception("文件路径不存在!");
 }
 if(!file.isHidden())
 {
  if(file.isFile())
  {
  //直接打印
  printFile(file,deepth);
  return;
  }
  if(file.isDirectory())
  {
  //先打印自身,然后递归打印子文件夹和子文件
  printFile(file,deepth);
  File [] childFiles = file.listFiles();
  if(null != childFiles && childFiles.length>0)
  {
   deepth++;
   for(File childFile : childFiles)
   {
   printFileStructure(childFile ,deepth);
   }
  }
  }
 }
 
 }
 /**
 * 打印文件夹树形结构
 * @param file
 * @param deepth
 */
 public static void printFile(File file ,int deepth)
 {
 String name = file.getName();
 StringBuffer sb = new StringBuffer();
 StringBuffer tempSb = new StringBuffer();
 for(int i =0;i<deepth;i++)
 {
  tempSb.append("   ");
 }
 sb.append(tempSb);
 sb.append("|"+"\n");
 sb.append(tempSb);
 sb.append("------"+name);
 System.out.println(sb.toString());
 }
 
 /**
 * 删除特定的文件
 * @return
 * @throws Exception 
 */
 public static void deleteNamedFile(String filePath,String regex) throws Exception
 {
 File file = new File(filePath);
 if(!file.exists())
 {
  throw new Exception("文件不存在!");
 }
 //匿名内部类实现 FilenameFilter 接口种的accept()方法,使用在正则表达式进行匹配
 //accept(File dir,String name) 使用当前文件对象  和  当前文件的名称 进行文件是否符合要求的标准判断;
 /*
  =======================================================================================
  File file = new File(".");
 String [] nameList = file.list((dir,name) -> name.endsWith(".java") || new File(name).isDirectory());
 for(String name : nameList)
 {
  System.out.println(name);
 }
 ========================================================================================
 这里使用Lamda表达式实现FilenameFilter 接口种的accept()方法
 */
 File[] fileList = file.listFiles(new FilenameFilter(){
 
  /**
  * 使用正则表达式进行匹配
  * @param regexStr
  * @return
  */
  private boolean regexMatch(String name,String regexStr)
  {
  Pattern pattern = Pattern.compile(regexStr);
  Matcher matcher = pattern.matcher(name);
  return matcher.find();
  }
  @Override
  public boolean accept(File dir, String name) {
  return regexMatch(name,regex);
  }});
 if(null != fileList && fileList.length>0)
 {
  for(File filteredFile: fileList)
  {
  filteredFile.delete();
  
  }
 }
 }
 /**
 * 复制文件/文件夹及其中的所有子文件夹和文件
 * @return
 */
 public static void copyFile(String srcFilePath,String destFilePath)
 {
 InputStream is = null;
 OutputStream os = null;
 try {
  if(creatFile(destFilePath))
  {
  File srcFile = new File(srcFilePath);
  File destFile = new File(destFilePath);
   is = new FileInputStream(srcFile);
   os = new FileOutputStream(destFile);
  byte [] buffer = new byte[2048];
  int temp = 0;
  while((temp = is.read(buffer))!=-1)
  {
   os.write(buffer, 0, temp);
  }
  }
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 finally
 {
  //java 7 以后可以不关闭,可以自动关闭
  if(null != os)
  {
  try {
   os.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
  if(null != is)
  {
  try {
   is.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
 }
 }
 /**
 * 复制指定地文件
 * @return
 *//*
 public static boolean copyNamedFile()
 {
 
 }
 *//**
 * 剪切文件/文件夹及其中的所有子文件夹和文件
 * @return
 */
 public static void cutFile(String srcFilePath,String destFilePath)
 {
 //先复制,再删除
 try {
  copyFile( srcFilePath, destFilePath);
  deleteFile(srcFilePath);
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
 /**
 * 剪切文件/文件夹及其中的所有子文件夹和文件
 * @return
 *//*
 public static boolean cutNamedFile()
 {
 
 }
 *//**
 * 文件压缩
 * @param destPath
 * @param fileFormats
 * @param srcFile
 * @return
 *//*
 public static boolean fileCompress(String destPath,String fileFormats,String srcFile,String regex)
 {
 
 }
 *//**
 * 文件解压缩
 * @param destPath
 * @param srcFile
 * @return
 *//*
 public static boolean fileDecompress(String destPath,String srcPath)
 {
 
 }
 *//**
 * 文件加密
 * @param srcPath
 * @param destPath
 * @param encryptKey
 * @param encryptAlgorithm
 * @return
 *//*
 public static boolean fileEncrypt(String srcPath,String destPath,String encryptKey,String encryptAlgorithm)
 {
 
 }
 *//**
 * 文件解密
 * @param srcPath
 * @param destPath
 * @param encryptKey
 * @param encryptAlgorithm
 * @return
 *//*
 public static boolean fileDecrypt(String srcPath,String destPath,String encryptKey,String encryptAlgorithm)
 {
 
 }*/
 
 public static void main(String [] args)
 {
 File file = new File("D:\\北邮人下载\\书籍\\编译原理");
 getBaseInfo(file);
 try {
  /*deleteNamedFile("D:\\北邮人下载\\书籍",".pdf");*/
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } 
 /*cutFile("F:\\抢票软件\\12306Bypass.exe","F:\\抢票软件\\12306Bypass\\12306Bypass.exe");*/
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java数据结构排序算法之树形选择排序详解

    java数据结构排序算法之树形选择排序详解

    这篇文章主要介绍了java数据结构排序算法之树形选择排序,结合具体实例形式分析了java树形选择排序的原理、实现技巧与相关注意事项,需要的朋友可以参考下
    2017-05-05
  • 配置Ant执行Jmeter脚本过程详解

    配置Ant执行Jmeter脚本过程详解

    这篇文章主要介绍了配置Ant执行Jmeter脚本过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • MybatisPlus3.3.0没有MybatisPlusInterceptor类问题的解决方法

    MybatisPlus3.3.0没有MybatisPlusInterceptor类问题的解决方法

    项目使用的是mybatis-plus-extension3.3.0依赖,然后在我使用分页插件的时候,发现无法导入MybatisPlusInterceptor类所以本文给大家介绍了MybatisPlus3.3.0没有MybatisPlusInterceptor类问题的解决方法,需要的朋友可以参考下
    2023-12-12
  • 单台Spring Cloud Eureka升级到三台Eureka高可用集群

    单台Spring Cloud Eureka升级到三台Eureka高可用集群

    今天小编就为大家分享一篇关于单台Spring Cloud Eureka升级到三台Eureka高可用集群,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • centos7安装jdk-8u333详细图文教程

    centos7安装jdk-8u333详细图文教程

    很多集成环境并不包含jdk环境,即使有相应的组件,在使用时也无法很好的使用,调试过程中也会遇到各种各样的问题,所以很多情况下还是建议在服务器内手动部署,下面这篇文章主要给大家介绍了关于centos7安装jdk-8u333的相关资料,需要的朋友可以参考下
    2023-05-05
  • Scala之Object的具体使用(小结)

    Scala之Object的具体使用(小结)

    这篇文章主要介绍了Scala之Object的具体使用(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • java实现计算器功能

    java实现计算器功能

    这篇文章主要为大家详细介绍了java实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析

    数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析

    本篇文章是对数组重排序(如何将所有奇数都放在所有偶数前面)的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Aspectj框架实战案例详解

    Aspectj框架实战案例详解

    这篇文章主要介绍了Aspectj框架实战,结合具体案例形式详细分析了Aspectj框架具体配置、使用、编译等相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • Spring解决泛型擦除的思路详解

    Spring解决泛型擦除的思路详解

    这篇文章主要介绍了Spring解决泛型擦除的思路,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01

最新评论