commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码。从common-io的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。
官网地址:http://commons.apache.org/proper/commons-io/
- 工具类
工具类包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils主要操作File类,IOUtils主要操作IO流,FilenameUtils则是操作文件名,
FileSystemUtils包含了一些JDK没有提供的用于访问文件系统的实用方法。
FileUtils的使用:
/** * 拷贝文件 * @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); }
- 尾端类
不同的计算机体系结构使用不同约定的字节排序。在所谓的“低位优先”体系结构中(如Intel),低位字节处于内存中最低位置,而其后的字节,则处于更高的位置。在“高位优先”的体系结构中(如Motorola),这种情况恰恰相反。
这个类库上有两个相关类:
EndianUtils包含用于交换java原对象和流之间的字节序列。
SwappedDataInputStream类是DataInput接口的一个实例。使用它,可以读取非本地的字节序列。
- 行迭代器
/** * 测试行迭代器 * @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); }
- 文件过滤器
/** * 空内容文件过滤器 * @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); } }
- 文件比较器
/** * 文件名称比较器 * @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()); } }
- 扩展流
空输出流-默默吸收发送给它的所有数据
T型输出流-全用两个输出流替换一个进行发送
字节数组输出流-这是一个更快版本的JDK类
计数流-计算通过的字节数
代理流-使用正确的方法委拖
可锁写入-使用上锁文件提供同步写入
等等