`
sungang_1120
  • 浏览: 322196 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

JAVA文件操作工具类FileUtils

阅读更多

package org.sg.sgg.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

import org.apache.log4j.Logger;

public class FileUtils {
   
    private final static Logger logger = Logger.getLogger(FileUtils.class);
   
   
   
   
    /**
     * 判断源文件是否存在且是否为文件
     * @param sourceFile
     * @return
     */
    public static boolean isExistsSource(String sourceFile) {
        File srcFile = new File(sourceFile);
        if (!srcFile.exists()) {
            logger.info("复制文件失败:源文件" + sourceFile + "不存在!");
            return false;
        } else if (!srcFile.isFile()) {
            logger.info("复制文件失败:" + sourceFile + "不是一个文件!");
            return false;
        }
       
        return true;
    }
   
   
    /**
     * 判断目标文件所在目录是否存在
     * @param targetFile
     * @return
     */
    public static boolean isExistsTargetDir(String targetFile) {
        File destFile = new File(targetFile);
       
        if (!destFile.getParentFile().exists()) {
            // 如果目标文件所在的目录不存在,则创建目录
            logger.info("目标文件所在的目录不存在:" + destFile.getParentFile());
            //创建目录
            //destFile.getParentFile().mkdirs();
            return false;
        }
       
        return true;
    }
    /**
     * 判断该文件是否存在
     * @param fileName - 文件名称
     * @param path - 目录
     * @return -  是否存在
     */
    public static boolean isFileExist(String fileName, String path){
        File file = new File(getDoPath(path)+fileName);
        return file.exists();
    }

    /**
     * 复制单个文件
     *
     * @param srcFileName
     *            待复制的文件名
     * @param destFileName
     *            目标文件名
     * @return 如果复制成功,则返回true,否则返回false
     */
    public static boolean copyFile(String srcFileName, String destFileName) {
        //源文件是否存在
        isExistsSource(srcFileName);
        //目标文件所在目录是否存在
        isExistsTargetDir(destFileName);
       
        // 准备复制文件
        int byteread = 0;// 读取的位数
        InputStream in = null;
        OutputStream out = null;
        File srcFile = new File(srcFileName);
        File destFile = new File(destFileName);
        try {
            // 打开原文件
            in = new FileInputStream(srcFile);
            // 打开连接到目标文件的输出流
            out = new FileOutputStream(destFile);
            byte[] buffer = new byte[1024];
            // 一次读取1024个字节,当byteread为-1时表示文件已经读完
            while ((byteread = in.read(buffer)) != -1) {
                // 将读取的字节写入输出流
                out.write(buffer, 0, byteread);
            }
            logger.info("复制文件" + srcFileName + "至" + destFileName + "成功!");
           
            return true;
        } catch (Exception e) {
            logger.error("复制文件失败:" + e.getMessage());
            return false;
        } finally {
            // 关闭输入输出流,注意先关闭输出流,再关闭输入流
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    logger.error("复制文件关闭流时出错:" + e.getMessage());
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    logger.error("复制文件关闭流时出错:" + e.getMessage());
                }
            }
        }
    }
   

    //==============================================================================
    //
    //删除文件夹
    //        此为调用java基础类,利用递归实现方式
    //        除此之外用apache io包FileUtils也很方便,以下为apache io包实现方式:
    //            org.apache.commons.io.FileUtils.deleteDirectory(f);//删除目录
    //            org.apache.tools.ant.util.FileUtils.delete(f);//删除文件
    //
    //==============================================================================
    /**
     * 删除文件夹:文件夹下的所有文件
     * @param filepath 格式形如:d://1//2/3//4
     *                     即为删除4这个文件夹
     * @return
     */
    public static boolean removeFile(String filepath) {
        try {
            File f = new File(filepath);
            if(f.exists() && f.isDirectory()) {  //判断是文件还是目录
                if(f.listFiles().length == 0) {  //若目录下没有文件则直接删除
                    f.delete();
                } else {  //若有则把文件放进数组,并判断是否有下级目录
                    File childFile[]=f.listFiles();
                    int i = f.listFiles().length;
                    for(int j = 0; j < i; j++) {
                        if(childFile[j].isDirectory()) {
                            //递归调用del方法并取得子目录路径
                            removeFile(childFile[j].getAbsolutePath()); 
                        }
                        childFile[j].delete();  //删除文件
                    }
                    //删除文件夹下的子文件后再删除主文件夹
                    f.delete();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("删除文件出错!");
            return false;
        }
       
        return true;
    }
    /**
     * 传递一个路径和文件名称,删除该文件
     * @param fileName - 文件名称
     * @param path - 路径
     * @return - 是否删除成功
     */
    public static boolean removeFile(String fileName, String path){
        boolean flag = false;
        if (isFileExist(fileName, path)) {
            File file = new File(getDoPath(path)+fileName);
            flag = file.delete();
        }
        return flag;
    }
    /**
     * 删除当前文件
     * @param file - 要删除的文件
     * @return 是否删除成功
     */
    public static boolean removeFile(File file){
         boolean flag = false;
            if (file != null && file.exists()) {
                flag = file.delete();
            }
            return flag;
    }
    /**
     * 传入一个文件名,得到这个文件名称的后缀  包含 .
     * @param fileName - 文件名
     * @return
     */
    public static String getSuffixContainPoint(String fileName){
        int index = fileName.lastIndexOf(".");
        if (index != -1) {
            String suffix = fileName.substring(index);//后缀
            return suffix;
        }else {
            return null;
        }
    }
    /**
     * 传入一个文件名,得到这个文件名称的后缀    不包含 .
     * @param fileName - 文件名
     * @return
     */
    public static String getSuffixUnContainPoint(String fileName){
         int index = fileName.lastIndexOf(".");
            if (index != -1) {
                String suffix = fileName.substring(index + 1);//后缀
                return suffix;
            } else {
                return null;
            }
    }
    /**
     * 利用uuid产生一个随机的name
     * @param fileName 文件名
     * @return
     */
    public static String getRandomName(String fileName){
         String randomName = UUID.randomUUID().toString();
         //如果文件没有后缀名  默认就是给添加 后缀   txt
         return getNewFileName(fileName, randomName , "txt");
    }
    /**
     *  用当前日期、时间和1000以内的随机数组合成的文件名称
     * @param fileName - 文件名
     * @return
     */
    public static String getNumberFileName(String fileName){
        SimpleDateFormat format = new SimpleDateFormat("yyMMddhhmmss");
        int rand = new Random().nextInt(1000);
        String numberFileName = format.format(new Date()) + rand;
        return getNewFileName(fileName, numberFileName, "txt");
    }
   
    /**
     * 传递一个文件名称和一个新名称,组合成一个新的带后缀文件名
     * 当传递的文件名没有后缀,会添加默认的后缀
     * @param fileName - 文件名称
     * @param newFileName - 新文件名称
     * @param nullSuffix - 为没有后缀的文件所添加的后缀 如果没有   可传递一个默认的后缀名 eq .txt
     * @return
     */
    public static String getNewFileName(String fileName,String newFileName,String nullSuffix){
        String suffix = getSuffixContainPoint(fileName);
        if (suffix != null) {
            newFileName += suffix;
        }else {
            newFileName = newFileName.concat(".").concat(nullSuffix);
        }
        return newFileName;
    }
   
   
   
    /**
     *
     * @param pathName
     * @return
     */
    public static boolean isBlankForPath(String pathName) {
        boolean flag = false;
        String[] letters = new String[] { "/", "\\", ":", "*", "?", "\"", " <",
                ">", " ¦", "%20", "#", "$", "%" };
        for (int i = 0; i < letters.length; i++) {
            if (pathName.indexOf(letters[i]) != -1) {
                flag = true;
            } else {
                flag = false;
            }
        }
        return flag;

    }
    /**
     * 处理后的系统文件路径
     * @param path
     * @return
     */
    public static String getDoPath(String path){
         path = path.replace("\\", "/");
         String lastChar = path.substring(path.length() - 1);
         if (!"/".equals(lastChar)) {
                path += "/";
         }
         return path;
    }
    /**
     * 创建指定的path路径目录
     * @param path - 目录、路径
     * @return
     */
    public static boolean mkDir(String path){
        File file = null;
        try {  
            file = new File(path);
            if (!file.exists()) {  
                return file.mkdirs();  
            }  
        }catch (Exception e) {
            logger.error("创建文件失败..错误如下:");
            e.printStackTrace();
        }finally{
             file = null;  
        }
        return false;  
    }
   
   
}

分享到:
评论

相关推荐

    FileUtils.java 文件工具类

    支持多线程上传下载,支持断点续传功能的一个工具类。

    [史上最全] 文件处理工具类 java版 处理文件流, 文件目录递归等

    `FileUtils` 是一个强大的文件处理工具类,它提供了丰富的API来简化文件操作,避免了许多常见的错误和陷阱。通过使用该工具类,开发者可以更加专注于业务逻辑的实现,提高开发效率和代码质量。在实际项目中,强烈...

    Java开发工具类

    QrcodeUtils.java\防止SQL注入和XSS攻击Filter\获取文件绝对路径最后的文件夹名称\加密工具类 - CryptoUtils.java\日期工具类 - DateUtil.java\图片处理工具类 - ImageUtils.java\文件相关操作工具类——FileUtils....

    【Java基础】-- FileUtils工具类常用方法(csdn)————程序.pdf

    在Java开发中,进行文件操作是必不可少的一部分,Apache Commons IO库提供了一个非常方便的工具类FileUtils,它对Java基础的IO操作进行了封装,使得文件处理更加简洁易用。在本文中,我们将详细介绍FileUtils工具类...

    java操作工具类

    Java操作工具类是Java开发中常见的一种代码组织方式,它集合了各种常用的功能函数,以提高代码复用性和开发效率。这些工具类通常包含了对字符串、数组、集合、日期时间等基本数据类型的操作,以及文件I/O、网络通信...

    java File文件处理工具类

    Java中的`File`类是Java I/O流体系中不可或缺的一部分,它是用来操作...结合`FileUtils`这样的辅助工具类,我们可以编写出更简洁、易维护的代码。在实际开发中,还应考虑异常处理和错误恢复策略,以确保程序的健壮性。

    一些java常用的工具类

    通常,这样的库会包含一系列针对特定场景的工具类,如日期时间处理、文件操作、字符串格式化、数据校验等。例如,可能会有一个DateTimeUtils类,提供日期和时间的格式化、比较和转换方法;一个FileUtils类,用于文件...

    FileUtils java web 文件上传下载工具

    `FileUtils`是一个方便的工具类,用于简化这些操作。本篇将详细讲解如何利用`FileUtils`实现文件的上传和下载,并介绍如何在Java Web项目中集成和使用这个工具。 首先,`FileUtils`并不是Java标准库的一部分,而是...

    java文件操作

    Java文件操作是编程中不可或缺的一部分,尤其是在处理I/O流、文件读写以及文件管理时。Apache Commons IO是一个非常实用的库,它为Java开发者提供了大量的工具类和方法,以简化文件操作。在这个场景中,我们关注的是...

    java文件读写工具类分享

    Java 文件读写工具类是 Java 语言中一个非常重要的工具类,主要用于实现文件的读写操作。在本文中,我们将详细介绍 Java 文件读写工具类的使用和实现。 获取项目根目录 在 Java 文件读写工具类中,获取项目根目录...

    java常用开发工具类大全

    - `org.apache.commons.io`: 提供了文件操作相关的工具类,如`FileUtils`, `IOUtils`等,简化了文件读写和复制等操作。 7. **Log4j或SLF4J** - 日志工具对于跟踪和调试程序至关重要,Log4j和SLF4J是两个广泛使用...

    JAVA28个常用工具类

    1. **FileUtils.java**: 文件操作工具类,提供了处理文件和目录的便捷方法。例如,复制文件、删除文件、创建目录、读写文件内容等。这些方法通常比直接使用Java的`java.io`包更安全、简洁。 2. **ImageUtils.java**...

    Java常用工具类.zip

    3. **文件操作工具类**:`java.io.File`类提供了基本的文件操作,如创建、删除、重命名等。而Apache Commons IO库中的`org.apache.commons.io.FileUtils`提供了更高级的文件操作,如读写文件、复制、移动等,简化了...

    我积攒的java工具类 基本满足开发需要的工具类

    D:\002 我的工具类\001 流\文件操作整体2\FileUtils.java D:\002 我的工具类\001 流\文件操作整体2\IOUtils.java D:\002 我的工具类\001 流\文件操作整体2\PropertiesUtil.java D:\002 我的工具类\0013数字 D:\002 ...

    java常用工具类汇总

    2. **文件工具类**: - 文件操作是开发中常见的需求,这类工具类可能包含读写文件、创建删除文件或目录、文件流处理等功能。例如,`FileUtils`类可能封装了Java的`File`类和`InputStream/OutputStream`的常用操作,...

    java 文件操作

    - Apache Commons IO库提供了丰富的文件操作工具类,如`FileUtils`,简化了常见的文件操作。 10. **异常处理**: - 文件操作常涉及`IOException`,需妥善处理,例如使用try-catch-finally结构。 以上就是Java...

    JAVA 工具类 项目

    1. **FileUtils**: 这个工具类主要处理与文件和目录相关的操作。它可能提供了如创建、删除、复制、移动文件,读取文件内容,检查文件是否存在等功能。例如,`readFileToString()`方法用于将整个文件读取为字符串,`...

    java代码开发常用工具类

    2.文件处理工具类:FileUtils 3.图片处理工具类:ImageUtils 4.媒体类型工具类:MimeTypeUtils 5.字符集工具类:CharsetKit 6.request请求处理工具类:CommonUtil 7.类型转换器:Convert 8.时间工具类:DateUtils 9....

    FileUtils.java

    收集下JAVA日常开发常用的工具类 包括 文件处理工具:FileUtils 有需要的大家可以下载使用希望能帮到各位

    28个java常用的工具类源码

    "28个java常用的工具类源码"这个压缩包包含了在Java开发中经常用到的一些工具类,这些工具类可以帮助我们简化代码,提高开发效率。下面,我们将详细探讨这28个工具类可能涵盖的知识点。 1. **ArrayList 和 ...

Global site tag (gtag.js) - Google Analytics