package Cristin.Common.File;

import org.apache.commons.io.FileUtils;

import org.apache.commons.io.filefilter.DirectoryFileFilter;

import org.apache.commons.io.filefilter.FileFileFilter;

import org.apache.commons.io.filefilter.FileFilterUtils;

import org.apache.commons.io.filefilter.IOFileFilter;

import org.junit.Test;

import java.io.*;

import java.net.URL;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import java.util.zip.CRC32;

/**

* FileUtils支持很多文件操作,如

*

* 文件写入 读取文件 创建目录 拷贝文件和目录 删除文件和目录 从URL转换 基于统配和过滤查看文件和目录 比较文件内容 文件的更新时间 检查校验码

*

* Created by Cristin on 2018年1月22日.

*/

public class FileUtilsTest

{

private static File parent = new File("D://test");

@Test

public void getDirTest()

{

// 获得基本的信息

System.out.println(FileUtils.getTempDirectory());// 获取临时目录

// java.io.tmpdir,getUserDirectoryPath返回路径字符串

System.out.println(FileUtils.getUserDirectory());// 获取用户主目录

// user.home,getUserDirectoryPath返回路径字符串

// 以可读的方式,返回文件的大小EB, PB, TB, GB, MB, KB or bytes

System.out.println(FileUtils.byteCountToDisplaySize(10000000));

System.out.println(FileUtils.byteCountToDisplaySize(1));

}

@SuppressWarnings("unused")

@Test

public void openStream() throws IOException

{

// 获取文件输入和输出的文件流

// 文件是目录或者不存在,都会跑出异常

InputStream in = FileUtils.openInputStream(new File("D://test/test1"));

OutputStream out = FileUtils.openOutputStream(new File("D://test/test2"));

out = FileUtils.openOutputStream(new File("D://test/test3"), true);// 是否追加的形式添加内容

}

@SuppressWarnings(

{ "deprecation", "unused" })

@Test

public void FileOperation() throws IOException

{

// 创建文件,如果文件存在则更新时间;如果不存在,创建一个空文件

// 创建空文件的方式为:

// final OutputStream out = openOutputStream(file);

// IOUtils.closeQuietly(out);

FileUtils.touch(new File("D://test/test4"));

// 文件内容的对比

FileUtils.contentEquals(new File("D://test/test1"), new File("D://test/test2"));

FileUtils.contentEqualsIgnoreEOL(new File("D://test/test1"), new File("D://test/test2"), null);// 忽略换行符,第三个参数是字符集

// 根据URL获取文件

FileUtils.toFile(new URL("file://D://test/test1"));

FileUtils.toFiles(null);

FileUtils.toURLs(new File[]

{ new File("D://test/test1") });

// 文件拷贝

FileUtils.copyFileToDirectory(new File("/test1"), new File("/dir"), true);// 第三个参数是否更新时间

FileUtils.copyFile(new File("/source"), new File("/target"), true);// TODO

// 阅读doCopy源码

// 目录拷贝

File srcDir = new File("/source");

File destDir = new File("/target");

FileUtils.copyDirectoryToDirectory(new File("/source"), new File("/target"));

FileUtils.copyDirectory(new File("/source"), new File("/target"));

FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);// 仅仅拷贝目录

IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");// 创建.txt过滤器

IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);

// 创建包含目录或者txt文件的过滤器

FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);

// Copy using the filter

FileUtils.copyDirectory(srcDir, destDir, filter);// TODO

// 阅读doCopyDirectory源码

// 文件拷贝

FileUtils.copyInputStreamToFile(new FileInputStream("/test"), new File("/test"));

FileUtils.copyURLToFile(new URL("file:/test"), new File("/test"));

// 删除文件

FileUtils.deleteDirectory(new File("/test"));// 删除目录下所有的内容

FileUtils.deleteQuietly(new File("/test"));// 如果是目录,会级联删除;不会抛出异常

// 判断文件是否存在

FileUtils.directoryContains(new File("/dir"), new File("/file"));

// 清除目录中的内容,不会删除该目录;

// 先verifiedListFiles检查目录,检查目录是否为目录、是否存在,然后调用listFiles,如果返回null,则抛出异常

// 遍历目录中的文件,如果是目录则递归删除;如果是文件则强制删除,删除失败(文件不存在或无法删除)都会抛出异常

FileUtils.cleanDirectory(new File("/dir"));// TODO verifiedListFiles

// <------2016/11/24

// 等待一个文件xx秒,知道文件创建后才返回。每max(100,remainning)循环检查一次

while (FileUtils.waitFor(new File("/dir"), 60))

{

}

// 读取目标文件,内部调用IOUtils.toString(inputstream,"utf-8")

String str = FileUtils.readFileToString(new File("/dir"), "utf-8");

// 内部调用IOUtils.toByteArray(in)

byte[] bytes = FileUtils.readFileToByteArray(new File("/dir"));

// 内部调用IOUtils.readLines(in, Charsets.toCharset(encoding));

List<String> strs = FileUtils.readLines(new File("/dir"), "utf-8");

// 内部调用IOUtils.lineIterator(in, encoding)

FileUtils.lineIterator(new File("/dir"), "utf-8");

// 四个参数分别为:目标文件,写入的字符串,字符集,是否追加

FileUtils.writeStringToFile(new File("/target"), "string", "utf-8", true);

// write可以接受charsequence类型的数据,string,stringbuilder和stringbuffer都是实现了charsequence接口

FileUtils.write(new File("/target"), "target char sequence", "utf-8", true);

FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes());// (file,字符数组)

FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes(), true);// (file,字符数组,是否追加)

FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes(), 0, 10);// (file,字符数组,起始位置,结束位置)

FileUtils.writeByteArrayToFile(new File("/target"), "bytes".getBytes(), 0, 10, true);// (file,字符数组,起始位置,结束位置,是否追加)

// writeLines多了一个lineEnding参数

FileUtils.writeLines(new File("/target"), "utf-8", FileUtils.readLines(new File("/target"), "utf-8"));

// 强制删除

FileUtils.forceDelete(new File("/target"));

// 在JVM

FileUtils.forceDeleteOnExit(new File("/target"));

// 强制创建文件目录,如果文件存在,会抛出异常

FileUtils.forceMkdir(new File("/target"));

// 强制创建父级目录

FileUtils.forceMkdirParent(new File("/xxxx/target"));

// 如果是文件,直接读取文件大小;如果是目录,级联计算文件下的所有文件大小

FileUtils.sizeOf(new File("/target"));// 返回Long

FileUtils.sizeOfAsBigInteger(new File("/target"));// 返回BigInteger

FileUtils.sizeOfDirectory(new File("/target"));

FileUtils.sizeOfDirectoryAsBigInteger(new File("/target"));

// 对比文件新旧

FileUtils.isFileNewer(new File("/target"), new File("/file"));

FileUtils.isFileOlder(new File("/target"), new Date());

FileUtils.checksum(new File("/target"), new CRC32());

FileUtils.checksumCRC32(new File("/target"));

FileUtils.moveDirectory(new File("/target"), new File("/file"));

FileUtils.moveDirectoryToDirectory(new File("/target"), new File("/file"), true);

FileUtils.moveFile(new File("/target"), new File("/file"));

FileUtils.moveFileToDirectory(new File("/target"), new File("/dir"), true);

FileUtils.moveToDirectory(new File("/target"), new File("/dir"), true);

FileUtils.isSymlink(new File("/target"));

}

@SuppressWarnings("unused")

@Test

public void findFiles()

{

// 返回文件的列表

List<File> files = (List<File>) FileUtils.listFiles(parent, new String[]

{ "test1", "test2" }, true);// TODO 重点看一下源码

// 返回文件迭代器

Iterator<File> files_iter = FileUtils.iterateFiles(parent, new String[]

{ "test1", "test3" }, true);

// 把collection<File>转换成File[]

FileUtils.convertFileCollectionToFileArray(files);

}

}

Common-io,FileUtils工具类的使用的更多相关文章

  1. IO流之FileUtils工具类的使用

    IO流之FileUtils工具类的使用: 使用apache的commons-io包下的FileUtils,我筛选了一些常用方法:

  2. Java IO 流--FileUtils 工具类封装

    IO流的操作写多了,会发现都已一样的套路,为了使用方便我们可以模拟commosIo 封装一下自己的FileUtils 工具类: 1.封装文件拷贝: 文件拷贝需要输入输出流对接,通过输入流读取数据,然后 ...

  3. Java常用工具类之IO流工具类

    package com.wazn.learn.util; import java.io.Closeable; import java.io.IOException; /** * IO流工具类 * * ...

  4. Java学习笔记43(打印流、IO流工具类简单介绍)

    打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(Outpu ...

  5. Java学习笔记33(IO:打印流,IO流工具类)

    打印流: 有两个类:PrintStream     PrintWriter类,两个类的方法一样,构造方法不一样 PrintStream构造方法:接收File类型,接收字符串文件名,接收字节输出流(Ou ...

  6. Java程序员的日常—— FileUtils工具类的使用

    package cn.xingoo.learn.commons; import org.apache.commons.io.FileUtils; import org.apache.commons.i ...

  7. FileUtils工具类的使用

    import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.DirectoryFileFilter; ...

  8. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  9. FilenameUtils工具类

    转载请出自出处:http://eksliang.iteye.com/blog/2217081 一.概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的 ...

随机推荐

  1. let的使用 优先于闭包

    let声明的变量在{}中使用,变量的作用域限制在块级域中 举例:使用js动态给ul添加li对象并点击第几项,显示当前点击是第几个 错误代码 window.onload = function(){ va ...

  2. 校正PHP服务器时间不准的问题

    关于怎样解决PHP服务器时间不准的问题,得针对不同的情况进行不同的处理. 下面是经常遇到的情况,及应对办法. 1.PHP服务器时区不对,使用下面代码修正: <?php $timezone = & ...

  3. SOAPUI 案例操作步骤

    1. 构建项目 2. 运行单个请求 3. 构建测试用例 4. 接口之间传递参数 5. 运行整个测试用例 构建测试 以天气接口为例: 接口: http://ws.webxml.com.cn/WebSer ...

  4. EditPlus配置Java

    --Java Compile-- 命令:D:\Program Files\Java\jdk1.7.0_79\bin\javac.exe 参数:$(FileName) 初始目录:$(FileDir) 动 ...

  5. react将表格动态生成视频列表【代码】【案例】

    只需要创建一个表格,id为videos,react就能将这个表格转换成视频列表,并点击自动播放 index.html <!DOCTYPE html> <html> <he ...

  6. Eloquent JavaScript #05# higher-order functions

    索引 Notes 高阶函数 forEach filter map reduce some findIndex 重写课本示例代码 Excercises Flattening Your own loop ...

  7. selenium得到弹出窗口

    # 获取当前的页面窗口 first_handle = brower.current_window_handle handles = brower.window_handles for i in han ...

  8. gdb调试问题汇总

    1. 宏调试 在GDB下,我们无法print宏定义,因为宏是预编译的.但是我们还是有办法来调试宏,这个需要GCC的配合. 在GCC编译程序的时候,加上-ggdb3参数,这样,你就可以调试宏了.另外,你 ...

  9. Link Cut Tree学习笔记

    从这里开始 动态树问题和Link Cut Tree 一些定义 access操作 换根操作 link和cut操作 时间复杂度证明 Link Cut Tree维护链上信息 Link Cut Tree维护子 ...

  10. linux 压缩工具

    gzip gunzip zcat bzip2 bunzip2 bzcat xz unxz xzcat a:  gzip 用法 # gzip file  压缩文件 不会保留源文件 直接生成 file.g ...