Common IO 使用小结
commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码。从common-io的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。
官网地址:http://commons.apache.org/proper/commons-io/
下载 :http://commons.apache.org/proper/commons-io/download_io.cgi
一、工具类
工具类包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils主要操作File类,IOUtils主要操作IO流,FilenameUtils则是操作文件名,FileSystemUtils包含了一些JDK没有提供的用于访问文件系统的实用方法。当前,只有一个用于读取硬盘空余空间的方法可用。实例如下
FileUtils的使用:
package com.wj.test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class FileUtilsTest {
private String basePath = null;@Before
public void setUp() {basePath = System.getProperty("user.dir") + "\\file\\";
}@After
public void tearDown() throws Exception {
}/*** 拷贝文件* @throws IOException*/
@Test
public void testCopy() throws IOException {File srcFile = new File(basePath + "a.txt");File destFile = new File(basePath + "b.txt");FileUtils.copyFile(srcFile, destFile);
}/*** 删除文件* @throws IOException*/
@Test
public void testDelete() throws IOException{File delFile = new File(basePath + "b.txt");FileUtils.forceDelete(delFile);//FileUtils.forceMkdir(delFile);
}/*** 比较文件内容* @throws IOException*/
@Test
public void testCompareFile() throws IOException{File srcFile = new File(basePath + "a.txt");File destFile = new File(basePath + "b.txt");boolean result = FileUtils.contentEquals(srcFile, destFile);System.out.println(result);
}/*** 移动文件* @throws IOException*/
@Test
public void testMoveFile() throws IOException{File srcFile = new File(basePath + "b.txt");File destDir = new File(basePath + "move");FileUtils.moveToDirectory(srcFile, destDir, true);
}/*** 读取文件内容* @throws IOException*/
@Test
public void testRead() throws IOException{File srcFile = new File(basePath + "a.txt");String content = FileUtils.readFileToString(srcFile);List<String> contents = FileUtils.readLines(srcFile);System.out.println(content);System.out.println("******************");for (String string : contents) {System.out.println(string);}
}/*** 写入文件内容* @throws IOException*/
@Test
public void testWrite() throws IOException{File srcFile = new File(basePath + "a.txt");FileUtils.writeStringToFile(srcFile, "\nyes文件", true);
}
}
FileSystemUtils的使用:
package com.wj.test;
import java.io.IOException;
import org.apache.commons.io.FileSystemUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class FileSystemUtilsTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}/*** 获取磁盘空余空间* @throws IOException*/
@SuppressWarnings("deprecation")
@Test
public void testFreeSpace() throws IOException {// 以字节为单位System.out.println(FileSystemUtils.freeSpace("c:\\") / 1024 / 1024 / 1024);System.out.println(FileSystemUtils.freeSpace("d:\\") / 1024 / 1024 / 1024);// 以k为单位System.out.println(FileSystemUtils.freeSpaceKb("e:\\") / 1024 / 1024);System.out.println(FileSystemUtils.freeSpaceKb("f:\\") / 1024 / 1024);}
}
二、尾端类
不同的计算机体系结构使用不同约定的字节排序。在所谓的“低位优先”体系结构中(如Intel),低位字节处于内存中最低位置,而其后的字节,则处于更高的位置。在“高位优先”的体系结构中(如Motorola),这种情况恰恰相反。
这个类库上有两个相关类:
EndianUtils包含用于交换java原对象和流之间的字节序列。
SwappedDataInputStream类是DataInput接口的一个实例。使用它,可以读取非本地的字节序列。
三、行迭代器
org.apache.commons.io.LineIterator类提供了一个灵活的方式与基于行的文件交互。可以直接创建一个实例,或者使用FileUtils或IOUtils的工厂方法来创建,实例如下:
package com.wj.test;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class LineIteratorTest {
private String basePath = null;@Before
public void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";
}@After
public void tearDown() throws Exception {
}/*** 测试行迭代器* @throws IOException*/
@Test
public void testIterator() throws IOException{File file = new File(basePath + "a.txt");LineIterator li = FileUtils.lineIterator(file);while(li.hasNext()){System.out.println(li.nextLine());}LineIterator.closeQuietly(li);
}
}
四、文件过滤器
org.apache.commons.io.filefilter包定义了一个合并了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此之外,这个包还提供了一系列直接可用的IOFileFilter的实现类,可以通过他们合并其它的文件过滤器。比如,这些文件过滤器可以在列出文件时使用或者在使用文件对话框时使用。实例如下:
package com.wj.test;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class FileFilterTest {
private String basePath = null;@Before
public void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";
}@After
public void tearDown() throws Exception {
}/*** 空内容文件过滤器* @throws IOException*/
@Test
public void testEmptyFileFilter() throws IOException{File dir = new File(basePath);String[] files = dir.list(EmptyFileFilter.NOT_EMPTY);for (String file : files) {System.out.println(file);}
}/*** 文件名称后缀过滤器* @throws IOException*/
@Test
public void testSuffixFileFilter() throws IOException{File dir = new File(basePath);String[] files = dir.list(new SuffixFileFilter("a.txt"));for (String file : files) {System.out.println(file);}
}
}
五、文件比较器
org.apache.commons.io.comparator包为java.io.File提供了一些java.util.Comparator接口的实现。例如,可以使用这些比较器对文件集合或数组进行排序。实例如下:
package com.wj.test;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.comparator.CompositeFileComparator;
import org.apache.commons.io.comparator.DirectoryFileComparator;
import org.apache.commons.io.comparator.NameFileComparator;
import org.apache.commons.io.comparator.PathFileComparator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class ComparatorTest {
private String basePath = null;@Before
public void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";
}@After
public void tearDown() throws Exception {
}/*** 文件名称比较器* @throws IOException*/
@Test
public void testNameFileComparator() throws IOException {File f1 = new File(basePath + "a.txt");File f2 = new File(basePath + "c.txt");int result = NameFileComparator.NAME_COMPARATOR.compare(f1, f2);System.out.println(result);
}/*** 文件路径比较器* @throws IOException*/
@Test
public void testPathFileComparator() throws IOException {File f1 = new File(basePath + "a.txt");File f2 = new File(basePath + "c.txt");int result = PathFileComparator.PATH_COMPARATOR.compare(f1, f2);System.out.println(result);
}/*** 组合比较器* @throws IOException*/
@SuppressWarnings("unchecked")
@Test
public void testCompositeFileComparator() throws IOException {File dir = new File(basePath);File [] files = dir.listFiles();for (File file : files) {System.out.println(file.getName());}CompositeFileComparator cfc = new CompositeFileComparator(DirectoryFileComparator.DIRECTORY_COMPARATOR,NameFileComparator.NAME_COMPARATOR);cfc.sort(files);System.out.println("*****after sort*****");for (File file : files) {System.out.println(file.getName());}
}
}
六、扩展流
org.apache.commons.io.input和org.apache.commons.io.output包中包含的针对数据流的各种各样的的实现。包括:
空输出流-默默吸收发送给它的所有数据
T型输出流-全用两个输出流替换一个进行发送
字节数组输出流-这是一个更快版本的JDK类
计数流-计算通过的字节数
代理流-使用正确的方法委拖
可锁写入-使用上锁文件提供同步写入
等等
Common IO 使用小结相关推荐
- Java18-day09【字节缓冲流、字符流、编码表、字符串与字符流中的编码解码问题、字符流读写数据的方式、字符缓冲流、IO流小结】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- Android技能树 — Android存储路径及IO操作小结
前言 最近过年刚上来,打算把自己的Android知识都整理一下. Android技能书系列: Android基础知识 Android技能树 - 动画小结 Android技能树 - View小结 And ...
- common.io中Tailer类读取文件内容乱码问题解决
common.io 是一个实用程序库,协助开发IO功能. org.apache.comons.io.input 包针对SUN JDK IO包进行了扩展,实现了一些功能简单的IO类,主要包括了对字节/字 ...
- java基础学习_IO流03_字符流、IO流小结、案例_day21总结
java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...
- Java字节缓冲流/字符流/IO流小结
文章目录 字节缓冲流 字节缓冲流构造方法 字符流 为什么会出现字符流 编码表 字符串中的编码解码问题 字符流中的编码解码问题 字符流写数据的5种方式 字符流读数据的2种方式 字符缓冲流 字符缓冲流特有 ...
- java IO流小结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- CPU处理器IO接口小结
计算机结构: 运算器 控制器 存储器 输入设备 输出设备 处理器CPU存储器IO设备: 地址总线 数据总线 控制总线 统一编址:和存储器地址一样统一编址: 独立编址:给接口一段单独的地址空间,使用单独 ...
- poj1330Nearest Common Ancestors(LCA小结)
题目请戳这里 题目大意:意如其名. 题目分析:本题只有一个查询,所以可以各种乱搞过去. 不过对于菜鸟而言,还是老老实实练习一下LCA算法. LCA有很多经典的算法.按工作方式分在线和离线2种. tar ...
- [Java基础]IO流小结
- Java基础班学习笔记(13)IO流
知识要点: 1:异常(理解) (1)程序出现的不正常的情况. (2)异常的体系 Throwable |--Error 严重问题,我们不处理. |--Exception |--RuntimeExcept ...
最新文章
- SAP系统如何快速上手?
- python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系
- 1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- Silverlight 4 新特性之Silverlight as Drop Target
- 对文本的内容进行排序
- SQLServer基础:Apply关键字用法介绍
- PostgreSQL的 initdb 源代码分析之二十一
- 如何计算机操作维护培训,电脑基本操作培训教材.ppt
- C#相关时间DateTime格式化
- MongoDB Sharding 机制分析
- 转载:python能用来做什么?
- InnoSetup 如何获取安装程序的路径?
- c语言 分开整数各个数位
- 计算机考试spss数据分析,基于SPSS的数据分析
- 万能五笔输入法弹窗_万能五笔输入法
- Linux 下查看内存问题
- 后端开发面试自我介绍_前端开发面试自我介绍
- 【软件工程导论】习题集
- 记录学习Android基础的心得07:硬件控制P2
- Latex参考文献问题---参考文献条数不显示