`
George_ghc
  • 浏览: 93809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FileUtils 介绍

 
阅读更多
Java的文件操作太基础,缺乏很多实用工具,比如对目录的操作,支持就非常的差了。如果你经常用Java操作文件或文件夹,你会觉得反复编写这些代码是令人沮丧的问题,而且要大量用到递归。
    下面是的一个解决方案,借助Apache Commons IO工具包(commons-io-1.1.jar)来简单实现文件(夹)的复制、移动、删除、获取大小等操作。

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.*;

/**
* 文件工具箱
*
* @author leizhimin 2008-12-15 13:59:16
*/
public final class FileToolkit {
        private static final Log log = LogFactory.getLog(FileToolkit.class);

        /**
         * 复制文件或者目录,复制前后文件完全一样。
         *
         * @param resFilePath 源文件路径
         * @param distFolder    目标文件夹
         * @IOException 当操作发生异常时抛出
         */
        public static void copyFile(String resFilePath, String distFolder) throws IOException {
                File resFile = new File(resFilePath);
                File distFile = new File(distFolder);
                if (resFile.isDirectory()) {
                        FileUtils.copyDirectoryToDirectory(resFile, distFile);
                } else if (resFile.isFile()) {
                        FileUtils.copyFileToDirectory(resFile, distFile, true);
                }
        }

        /**
         * 删除一个文件或者目录
         *
         * @param targetPath 文件或者目录路径
         * @IOException 当操作发生异常时抛出
         */
        public static void deleteFile(String targetPath) throws IOException {
                File targetFile = new File(targetPath);
                if (targetFile.isDirectory()) {
                        FileUtils.deleteDirectory(targetFile);
                } else if (targetFile.isFile()) {
                        targetFile.delete();
                }
        }

        /**
         * 移动文件或者目录,移动前后文件完全一样,如果目标文件夹不存在则创建。
         *
         * @param resFilePath 源文件路径
         * @param distFolder    目标文件夹
         * @IOException 当操作发生异常时抛出
         */
        public static void moveFile(String resFilePath, String distFolder) throws IOException {
                File resFile = new File(resFilePath);
                File distFile = new File(distFolder);
                if (resFile.isDirectory()) {
                        FileUtils.moveDirectoryToDirectory(resFile, distFile, true);
                } else if (resFile.isFile()) {
                        FileUtils.moveFileToDirectory(resFile, distFile, true);
                }
        }


        /**
         * 重命名文件或文件夹
         *
         * @param resFilePath 源文件路径
         * @param newFileName 重命名
         * @return 操作成功标识
         */
        public static boolean renameFile(String resFilePath, String newFileName) {
                String newFilePath = StringToolkit.formatPath(StringToolkit.getParentPath(resFilePath) + "/" + newFileName);
                File resFile = new File(resFilePath);
                File newFile = new File(newFilePath);
                return resFile.renameTo(newFile);
        }

        /**
         * 读取文件或者目录的大小
         *
         * @param distFilePath 目标文件或者文件夹
         * @return 文件或者目录的大小,如果获取失败,则返回-1
         */
        public static long genFileSize(String distFilePath) {
                File distFile = new File(distFilePath);
                if (distFile.isFile()) {
                        return distFile.length();
                } else if (distFile.isDirectory()) {
                        return FileUtils.sizeOfDirectory(distFile);
                }
                return -1L;
        }

        /**
         * 判断一个文件是否存在
         *
         * @param filePath 文件路径
         * @return 存在返回true,否则返回false
         */
        public static boolean isExist(String filePath) {
                return new File(filePath).exists();
        }

        /**
         * 本地某个目录下的文件列表(不递归)
         *
         * @param folder ftp上的某个目录
         * @param suffix 文件的后缀名(比如.mov.xml)
         * @return 文件名称列表
         */
        public static String[] listFilebySuffix(String folder, String suffix) {
                IOFileFilter fileFilter1 = new SuffixFileFilter(suffix);
                IOFileFilter fileFilter2 = new NotFileFilter(DirectoryFileFilter.INSTANCE);
                FilenameFilter filenameFilter = new AndFileFilter(fileFilter1, fileFilter2);
                return new File(folder).list(filenameFilter);
        }

        /**
         * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!)
         *
         * @param res            原字符串
         * @param filePath 文件路径
         * @return 成功标记
         */
        public static boolean string2File(String res, String filePath) {
                boolean flag = true;
                BufferedReader bufferedReader = null;
                BufferedWriter bufferedWriter = null;
                try {
                        File distFile = new File(filePath);
                        if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs();
                        bufferedReader = new BufferedReader(new StringReader(res));
                        bufferedWriter = new BufferedWriter(new FileWriter(distFile));
                        char buf[] = new char[1024];         //字符缓冲区
                        int len;
                        while ((len = bufferedReader.read(buf)) != -1) {
                                bufferedWriter.write(buf, 0, len);
                        }
                        bufferedWriter.flush();
                        bufferedReader.close();
                        bufferedWriter.close();
                } catch (IOException e) {
                        flag = false;
                        e.printStackTrace();
                }
                return flag;
        }
}
-------------------------------------------------------------------------------------------------------------


import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;


/**
* 字符串工具箱
*
* @author leizhimin 2008-12-15 22:40:12
*/
public final class StringToolkit {
  /**
  * 将一个字符串的首字母改为大写或者小写
  *
  * @param srcString 源字符串
  * @param flag     大小写标识,ture小写,false大些
  * @return 改写后的新字符串
  */
  public static String toLowerCaseInitial(String srcString, boolean flag) {
    StringBuilder sb = new StringBuilder();
    if (flag) {
        sb.append(Character.toLowerCase(srcString.charAt(0)));
    } else {
        sb.append(Character.toUpperCase(srcString.charAt(0)));
    }
    sb.append(srcString.substring(1));
    return sb.toString();
  }

  /**
  * 将一个字符串按照句点(.)分隔,返回最后一段
  *
  * @param clazzName 源字符串
  * @return 句点(.)分隔后的最后一段字符串
  */
  public static String getLastName(String clazzName) {
    String[] ls = clazzName.split("\\.");
    return ls[ls.length - 1];
  }

  /**
  * 格式化文件路径,将其中不规范的分隔转换为标准的分隔符,并且去掉末尾的"/"符号。
  *
  * @param path 文件路径
  * @return 格式化后的文件路径
  */
  public static String formatPath(String path) {
    String reg0 = "\\\\+";
    String reg = "\\\\+|/+";
    String temp = path.trim().replaceAll(reg0, "/");
    temp = temp.replaceAll(reg, "/");
    if (temp.endsWith("/")) {
        temp = temp.substring(0, temp.length() - 1);
    }
    if (System.getProperty("file.separator").equals("\\")) {
      temp= temp.replace('/','\\');
    }
    return temp;
  }

  /**
  * 格式化文件路径,将其中不规范的分隔转换为标准的分隔符,并且去掉末尾的"/"符号(适用于FTP远程文件路径或者Web资源的相对路径)。
  *
  * @param path 文件路径
  * @return 格式化后的文件路径
  */
  public static String formatPath4Ftp(String path) {
    String reg0 = "\\\\+";
    String reg = "\\\\+|/+";
    String temp = path.trim().replaceAll(reg0, "/");
    temp = temp.replaceAll(reg, "/");
    if (temp.endsWith("/")) {
        temp = temp.substring(0, temp.length() - 1);
    }
    return temp;
  }

  public static void main(String[] args) {
    System.out.println(System.getProperty("file.separator"));
    Properties p = System.getProperties();
    System.out.println(formatPath("C:///\\xxxx\\\\\\\\\\///\\\\R5555555.txt"));

//     List<String> result = series2List("asdf | sdf|siii|sapp|aaat| ", "\\|");
//     System.out.println(result.size());
//     for (String s : result) {
//         System.out.println(s);
//     }
  }

  /**
  * 获取文件父路径
  *
  * @param path 文件路径
  * @return 文件父路径
  */
  public static String getParentPath(String path) {
    return new File(path).getParent();
  }

  /**
  * 获取相对路径
  *
  * @param fullPath 全路径
  * @param rootPath 根路径
  * @return 相对根路径的相对路径
  */
  public static String getRelativeRootPath(String fullPath, String rootPath) {
    String relativeRootPath = null;
    String _fullPath = formatPath(fullPath);
    String _rootPath = formatPath(rootPath);

    if (_fullPath.startsWith(_rootPath)) {
        relativeRootPath = fullPath.substring(_rootPath.length());
    } else {
        throw new RuntimeException("要处理的两个字符串没有包含关系,处理失败!");
    }
    if (relativeRootPath == null) return null;
    else
        return formatPath(relativeRootPath);
  }

  /**
  * 获取当前系统换行符
  *
  * @return 系统换行符
  */
  public static String getSystemLineSeparator() {
    return System.getProperty("line.separator");
  }

  /**
  * 将用“|”分隔的字符串转换为字符串集合列表,剔除分隔后各个字符串前后的空格
  *
  * @param series 将用“|”分隔的字符串
  * @return 字符串集合列表
  */
  public static List<String> series2List(String series) {
    return series2List(series, "\\|");
  }

  /**
  * 将用正则表达式regex分隔的字符串转换为字符串集合列表,剔除分隔后各个字符串前后的空格
  *
  * @param series 用正则表达式分隔的字符串
  * @param regex 分隔串联串的正则表达式
  * @return 字符串集合列表
  */
  private static List<String> series2List(String series, String regex) {
    List<String> result = new ArrayList<String>();
    if (series != null && regex != null) {
        for (String s : series.split(regex)) {
          if (s.trim() != null && !s.trim().equals("")) result.add(s.trim());
        }
    }
    return result;
  }

  /**
  * @param strList 字符串集合列表
  * @return 通过“|”串联为一个字符串
  */
  public static String list2series(List<String> strList) {
    StringBuffer series = new StringBuffer();
    for (String s : strList) {
        series.append(s).append("|");
    }
    return series.toString();
  }

  /**
  * 将字符串的首字母转为小写
  *
  * @param resStr 源字符串
  * @return 首字母转为小写后的字符串
  */
  public static String firstToLowerCase(String resStr) {
    if (resStr == null) {
        return null;
    } else if ("".equals(resStr.trim())) {
        return "";
    } else {
        StringBuffer sb = new StringBuffer();
        Character c = resStr.charAt(0);
        if (Character.isLetter(c)) {
          if (Character.isUpperCase(c))
            c = Character.toLowerCase(c);
          sb.append(resStr);
          sb.setCharAt(0, c);
          return sb.toString();
        }
    }
    return resStr;
  }

  /**
  * 将字符串的首字母转为大写
  *
  * @param resStr 源字符串
  * @return 首字母转为大写后的字符串
  */
  public static String firstToUpperCase(String resStr) {
    if (resStr == null) {
        return null;
    } else if ("".equals(resStr.trim())) {
        return "";
    } else {
        StringBuffer sb = new StringBuffer();
        Character c = resStr.charAt(0);
        if (Character.isLetter(c)) {
          if (Character.isLowerCase(c))
            c = Character.toUpperCase(c);
          sb.append(resStr);
          sb.setCharAt(0, c);
          return sb.toString();
        }
    }
    return resStr;
  }

}
————————————————————
Fileutils的内容
最后检查于 version 4.1.

包含的程序
chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, shred, sync, touch and vdir

具体说明
chgrp
c改变文件和目录属组,属组可以使用组名或者组识别号表示。

chmod
改变文件和目录的权限,权限可以使用符号或者八进制两种表达方式。 .

chown
改变文件和目录的所有权(包括用户和/或组)。

cp
把文件从一个地方复制到另一个地方。 .

dd
以可选块长度复制文件,默认情况下从标准输入设备输出到标准输出设备。复制过程中,还可以对文件进行一些转换。 .

df
显示参数中的文件所在分区磁盘空间的使用情况,如果没有给出文件参数就显示所有已经安装的文件系统的可用空间数量

dir, ls and vdir
ls、dir和vdir: dir和vdir都是ls的一个版本,默认的输出格式不同。这些程序的功能都是列出给出的文件或者目录名。目录中的内容按照字母顺序排序。对于ls,如果标准输出设备是一个终端,默认的文件名显示方式是成列输出,竖向排序;否则每行只有一个输出。对于dir,默认的文件名显示方式也是成列输出,竖向排序。对于vdir,文件名使用长格式显示。

dircolors
设置LS_COLOR环境变量。LS_COLOR环境变量用来改变ls及相关工具默认的颜色组合。 .

du
显示参数使用的磁盘空间的数量,对于参数为目录还会列出每个子目录磁盘空间占用情况。 .

install
复制文件,设置它们的权限,如果可能还设置拥有它们的用户和组。

ln
做文件之间的硬/软(符号)连接。

mkdir
建立目录,使用给定的参数作为目录名。

mkfifo
以给定的参数作为名字建立FIFO(又叫命名管道)文件。 .

mknod
使用给出的文件名,建立一个FIFO、字符特殊文件(special file)或者块特殊文件(special file)。特殊文件是UNIX系统的一个术语,意思是能够产生或者接受数据的东西,也就是通常所说的设备文件

mv
根据所给参数的不同,把文件或者目录移动到另外的目录或者将其改名。

rm
删除文件或者目录。

rmdir
删除目录(目录必需为空)。

shred
安全删除一个文件,重写其占用的磁盘空间,使其无法恢复。

sync
使磁盘和内存的数据同步。

touch
把参数指定的文件的访问和修改时间改为当前的时间。如果文件不存在,它就建立一个空文件。
分享到:
评论

相关推荐

    FileUtils 的方法大全

    本文将详细介绍 `FileUtils` 类中提供的各种文件操作方法,这些方法在 Java 开发中非常实用,能够帮助开发者高效地完成文件处理任务。 #### 一、获取系统的临时目录路径 **方法名**: `getTempDirectoryPath` **...

    org.apache.commons.io.FileUtils

    下面将详细介绍`FileUtils`类中的主要功能和知识点。 1. **读取文件** - `readFileToString(File file, Charset encoding)`: 这个方法用于将整个文件读取为一个字符串,指定字符编码。它比直接使用`BufferedReader...

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

    在本文中,我们将详细介绍FileUtils工具类的一些常用方法,包括读取文件、拷贝文件、拷贝目录以及删除文件和目录等。 1.1. 读取文件 FileUtils提供了一些静态方法来读取文件内容,如`readFileToString`用于将整个...

    FileUtils java web 文件上传下载工具

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

    Java字符编码及获取文件编码

    在Java编程语言中,字符编码是一个至关重要的概念,它涉及到数据的存储、处理和传输。...通过本文介绍的知识,你应该能够更好地应对编码相关的挑战,并且可以进一步研究`FIleCode.java`源代码,加深理解。

    ruby 目录操作详细介绍

    下面将详细介绍如何在Ruby中进行目录的创建、删除、查询、修改以及读取文件等操作。 1. 创建文件夹 Ruby提供了多种创建文件夹的方法。例如,可以使用`Dir.new`或`Dir::mkdir`来创建一个新的目录,如果没有指定完整...

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

    本文介绍了一个实用且功能全面的文件处理工具类——`FileUtils`。该类封装了50多个与文件相关的操作方法,简化了开发人员在文件操作方面的负担,无需手动处理文件流的关闭或连接池等问题,极大提高了代码的可读性...

    Android存储字符串数据到txt文件

    今天,我们将详细介绍如何在Android中存储字符串数据到txt文件。 Android存储字符串数据到txt文件的需求主要来自于以下几个方面: 1. 需要存储大量数据,超过SharePreference的限制(89kb); 2. 需要将数据存储到...

    百度地图截图

    本文将详细介绍如何在Java环境中使用百度地图API进行地图截图,并结合文件操作功能保存截图。 首先,我们来探讨核心工具类`ScreenshotsUtil.java`。此类极有可能封装了调用百度地图API进行截图的所有操作。在使用...

    获取文件编码方式的两种方式(1.cpdetector第三方jar包,包含源码elipse项目;2.EncodingDetect.java工具类)

    本篇文章将详细介绍两种常用的方法来检测Java程序中的文件编码:一是使用`cpdetector`第三方库,二是通过自定义的`EncodingDetect.java`工具类。 1. **cpdetector第三方库** `cpdetector`是一个开源的Java库,它...

    复制res下的文件进sd卡

    以下将详细介绍这些内容。 首先,`res`文件夹是Android项目中的一个重要组成部分,它包含了应用程序的所有资源,如图片(drawable)、布局(layout)、字符串(values)等。这些资源在编译时会被打包进APK,并在...

    commons-io-1.4-src.zip_commons-_commons-fileupload_commons-io_co

    首先,让我们简要介绍一下Apache Commons-IO库。这个库包含了大量对Java标准I/O API的扩展和补充,如文件操作、流处理、转换和检测等。其设计目标是解决Java I/O类库中的不足,提供更强大和灵活的功能,同时保持代码...

    cocos2dx读取excel文件

    本文将详细介绍如何在Cocos2d-x项目中读取Excel文件。 Cocos2d-x是一个跨平台的2D游戏开发框架,基于C++编写,它提供了丰富的API来简化游戏开发过程。然而,C++标准库并不直接支持读取Excel文件,所以我们需要借助...

    ruby基础教程(第四版)第17章 IO类1

    本章主要介绍了如何进行文件和目录的相关操作。 18.1 文件的操作 18.1.1 变更文件名 使用`File.rename`方法可以更改文件名,但要注意这个方法不能跨文件系统或驱动器执行。如果源文件不存在,会抛出`Errno::ENOENT...

    org.jresearch.commons.gwt.utils.shared-1.0.45.zip

    4. **文档**:可能有`README.md`或`docs`目录,提供项目介绍、使用指南和API参考。 5. **资源文件**:如图片、配置文件等,存放在`src/main/resources`或相应的测试资源目录。 要深入学习和利用这个开源项目,你...

    Android静默安装常用工具类

    源码可见FileUtils.java,更多方法及更详细参数介绍可见FileUtils Api Guide。 8、ResourceUtils Android Resource工具类,可用于从android资源目录的raw和assets目录读取内容,如: geFileFromAssets(Context ...

    Apache Commons常用类与方法介绍(案例分析-包含源代码)

    `FileUtils` 类提供了一系列静态方法用于文件的复制、删除、移动等操作;`IOUtils` 提供了对流的关闭、复制和读取等便利方法。 2. **Lang**: 这是处理基本 Java 类型和对象的模块。`StringUtils` 包含了大量的字符...

    java实现追加内容到文件末尾的常用方法分析

    追加内容到文件末尾可以使用多种方法,本文将介绍三种常用的方法,并对每种方法进行详细的分析。 方法一:使用 FileOutputStream 使用 FileOutputStream 可以追加内容到文件末尾。需要在构造 FileOutputStream 时...

    commons-io-2.0

    Apache Commons IO 包含了许多关键知识点,下面将详细介绍其中的一些核心特性: 1. **FileUtils**: 这是Apache Commons IO中的一个主要类,提供了大量静态方法来处理文件操作。例如,可以方便地复制、移动、删除...

    temp 文件夹 清理

    下面将详细介绍如何通过编程实现`temp`文件夹的自动清理。 首先,我们需要导入Java的`File`和`FileUtils`类,`File`用于操作文件和目录,而`FileUtils`(来自Apache Commons IO库)提供了更丰富的文件操作方法,如...

Global site tag (gtag.js) - Google Analytics