第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 【跟我学apache-commons】【四】commons-io的使用

【跟我学apache-commons】【四】commons-io的使用

时间:2020-10-20 19:12:26

相关推荐

【跟我学apache-commons】【四】commons-io的使用

commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码。从common-io的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。

官网地址:/proper/commons-io/

下载 :/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 mons.io.FileUtils;import org.junit.After;import org.junit.Before;import org.junit.Test;public class FileUtilsTest {private String basePath = null;@Beforepublic void setUp() {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 拷贝文件* @throws IOException*/@Testpublic void testCopy() throws IOException {File srcFile = new File(basePath + "a.txt");File destFile = new File(basePath + "b.txt");FileUtils.copyFile(srcFile, destFile);}/*** 删除文件* @throws IOException*/@Testpublic void testDelete() throws IOException{File delFile = new File(basePath + "b.txt");FileUtils.forceDelete(delFile);//FileUtils.forceMkdir(delFile);}/*** 比较文件内容* @throws IOException*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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 mons.io.FileSystemUtils;import org.junit.After;import org.junit.Before;import org.junit.Test;public class FileSystemUtilsTest {@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}/*** 获取磁盘空余空间* @throws IOException*/@SuppressWarnings("deprecation")@Testpublic 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接口的一个实例。使用它,可以读取非本地的字节序列。

三、行迭代器

mons.io.LineIterator类提供了一个灵活的方式与基于行的文件交互。可以直接创建一个实例,或者使用FileUtils或IOUtils的工厂方法来创建,实例如下:

package com.wj.test;import java.io.File;import java.io.IOException;import mons.io.FileUtils;import mons.io.LineIterator;import org.junit.After;import org.junit.Before;import org.junit.Test;public class LineIteratorTest {private String basePath = null;@Beforepublic void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 测试行迭代器* @throws IOException*/@Testpublic 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);}}

四、文件过滤器

mons.io.filefilter包定义了一个合并了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此之外,这个包还提供了一系列直接可用的IOFileFilter的实现类,可以通过他们合并其它的文件过滤器。比如,这些文件过滤器可以在列出文件时使用或者在使用文件对话框时使用。实例如下:

package com.wj.test;import java.io.File;import java.io.IOException;import mons.io.filefilter.EmptyFileFilter;import mons.io.filefilter.SuffixFileFilter;import org.junit.After;import org.junit.Before;import org.junit.Test;public class FileFilterTest {private String basePath = null;@Beforepublic void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 空内容文件过滤器* @throws IOException*/@Testpublic 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*/@Testpublic 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);}}}

五、文件比较器

parator包为java.io.File提供了一些parator接口的实现。例如,可以使用这些比较器对文件集合或数组进行排序。实例如下:

package com.wj.test;import java.io.File;import java.io.IOException;import positeFileComparator;import parator.DirectoryFileComparator;import parator.NameFileComparator;import parator.PathFileComparator;import org.junit.After;import org.junit.Before;import org.junit.Test;public class ComparatorTest {private String basePath = null;@Beforepublic void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 文件名称比较器* @throws IOException*/@Testpublic void testNameFileComparator() throws IOException {File f1 = new File(basePath + "a.txt");File f2 = new File(basePath + "c.txt");int result = pare(f1, f2);System.out.println(result);}/*** 文件路径比较器* @throws IOException*/@Testpublic void testPathFileComparator() throws IOException {File f1 = new File(basePath + "a.txt");File f2 = new File(basePath + "c.txt");int result = pare(f1, f2);System.out.println(result);}/*** 组合比较器* @throws IOException*/@SuppressWarnings("unchecked")@Testpublic 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());}}}

六、扩展流

mons.io.input和mons.io.output包中包含的针对数据流的各种各样的的实现。包括:

空输出流-默默吸收发送给它的所有数据T型输出流-全用两个输出流替换一个进行发送字节数组输出流-这是一个更快版本的JDK类计数流-计算通过的字节数代理流-使用正确的方法委拖可锁写入-使用上锁文件提供同步写入等等

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。