Java程序员的日常—— FileUtils工具类的使用
package cn.xingoo.learn.commons;
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 xxh on 2016/11/24.
*/
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));
}
@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);//是否追加的形式添加内容
}
@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"));
}
@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);
}
}
Java程序员的日常—— FileUtils工具类的使用的更多相关文章
- Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...
- Java程序员的日常——经验贴(纯干货)
工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...
- Java程序员的日常—— 《编程思想》关于类的使用常识
Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...
- Java程序员的日常 —— 《编程思想》持有对象
集合框架可以说是Java里面必备的知识点了,日常的使用中也会遇到各种情况需要使用到集合.下面就简单介绍下各种集合的使用场景: List List可以看做是数组,实现的方式有两种: ArrayList ...
- Java程序员的日常—— Properties文件的读写
在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...
- Java程序员的日常—— IOUtils总结
以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有 ...
- Java程序员的日常—— 垃圾回收中引用类型的作用
在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...
- 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。
返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...
- Java程序员的日常 —— 多进程开发
最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理. 这里简单的介绍下: 如何在Java中执行命令 在windows下肯定是dos命令了,而在linux则为shell命令.执行的方 ...
随机推荐
- 支付宝支付-APP支付服务端详解
支付宝APP支付服务端详解 前面接了微信支付,相比微信支付,支付宝APP支付提供了支付分装类,下面将实现支付宝APP支付.订单查询.支付结果异步通知.APP支付申请参数说明,以及服务端返回APP端发起 ...
- 微服务中的netty
一般使用netty主要是整个netty流程的理解,实际开发中服务端.客户端参数的配置,以及连接 handle的管理是关键,再有就是encode和decode编码.解码. 服务端流程图 客户端流程图包含 ...
- Format
strTimeZone := Format('%s ~ %s',[formatdatetime('yyyy-mm-dd',dtpStartTime.DateTime), formatdatetime( ...
- iOS之防止用户重复点击Button(按钮)问题
在项目中,我们往往会遇到这样的问题:因为网络较慢的原因,用户会不耐烦的一直去点击按钮,这样导致的结果时:相关代码一遍一遍的被重复执行,如果按钮的事件是网络请求的话,这样又导致一种网络请求的循环.所以我 ...
- 一些关于HTML与CSS的总结与实际应用
//学习前端也快一年了,觉得有必要好好总结一下这一年来学过的知识.一些是前辈们的精华,文章最后会讲地址一一放出,若原作者有任何介意,请及时联系我删除. 关于DOCTYPE 1.DOCTYPE的作用是什 ...
- 关于CSV文件 Excel打开乱码问题的解决方案
近日写java程序中,将数据输出到csv文件中,发现Excel打开之后,中文均为乱码 于是寻找解决方案,发现最简单的方式还是如此了 1. 将输出的csv文件用记事本打开 2. 另存为将文件编码格式改为 ...
- mssql与mysql 数据迁移
概要: mssql向mysql迁移的实例,所要用到的工具bcp和load data local infile. 由于订单记录的数据是存放在mssql服务器上的,而项目需求把数据迁移到mysql ser ...
- linux常用命令总结
du -sh * 当前目录下所有文件占用空间大小,df 空间占用 top 资源使用情况 M 根据驻留内存大小进行排序 tail 1.tail -f filename说明:监视filename文件的尾 ...
- Torch Problems: require some packages doesn't work
I've recently got a problem. require 'cutorch' doesn't work. But it was ok yesterday, although I hav ...
- javascript变量的作用域
javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...