java io操作是开发中比较常用的技术,但是如果每次都使用原生的IO流来操作会显得比较繁琐。

添加maven依赖:

IOUtils 包含一些工具类,用于处理读,写和拷贝,这些方法基于 InputStream, OutputStream, Reader 和 Writer工作.

FileSystemUtils包含一些工具类,基于文件系统访问功能不被JDK支持。目前,只有一个方法就是得到驱动器空余空间。注意这使用命令行而不是 native code。

SwappedDataInputStream实现了DataInput接口。可以从文件中读取非本地字节序。 

IOUtils.copy(InputStream input, OutputStream output, int bufferSize)

IOUtils.copy(Reader input, OutputStream output, String outputEncoding)

IOUtils.copyLarge(Reader input, Writer output, char[] buffer)

IOUtils.toInputStream(String input, Charset encoding)

IOUtils.toBufferedReader(Reader reader) // 获取一个字符缓冲流

// 获取缓冲流

IOUtils.buffer(Reader reader)

// 将输入流转换成字符串

IOUtils.toString(InputStream input, Charset encoding)

IOUtils.toString(URL url, String encoding)

IOUtils.toByteArray(InputStream input)

IOUtils.toByteArray(URL url)

 

IOUtils.readLines(InputStream input, Charset encoding)

IOUtils.writeLines(Collection<?> lines, String lineEnding, OutputStream output, Charset encoding)

IOUtils.read(InputStream input, byte[] buffer)

// 把数据写入到输出流中

IOUtils.write(byte[] data, Writer output, String encoding)

IOUtils.write(String data, Writer output)

// 从一个流中读取内容,如果读取的长度不够,就会抛出异常

IOUtils.readFully(InputStream input, byte[] buffer, int offset, int length) IOUtils.readFully(Reader input, char[] buffer)

IOUtils.contentEquals(InputStream input1, InputStream input2) // 比较两个流是否相等

 

IOUtils.skipFully(InputStream input, long toSkip) // 如果忽略的长度大于现有的长度,就会抛出异常

// 读取流,返回迭代器

IOUtils.lineIterator(InputStream input, String encoding)

IOUtils.close(URLConnection conn)

FileUtils的使用:

FileUtils.copyDirectory(File srcDir, File destDir, FileFilter filter) // 复制文件夹,带有文件过滤功能

// 复制文件

FileUtils.copyFileToDirectory(File srcFile, File destDir) // 复制文件到一个指定的目录

FileUtils.copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout)

FileUtils.writeStringToFile(File file, String data, String encoding)

FileUtils.writeByteArrayToFile(File file, byte[] data)

// encoding:文件编码,lineEnding:每行以什么结尾

FileUtils.writeLines(File file, Collection<?> lines, String lineEnding)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, boolean append)

// 往文件里面写内容

FileUtils.write(File file, CharSequence data, String encoding)

// 文件移动

FileUtils.moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) // 以子文件的形式移动到另外一个文件夹下

// 清空和删除文件夹

FileUtils.forceDelete(File file) // 删除,会抛出异常

// 创建文件夹

 

FileUtils.openOutputStream(File file)

FileUtils.readFileToString(File file, Charset encoding) // 把文件读取成字符串

FileUtils.readLines(File file, String encoding)

FileUtils.isFileNewer(File file, Date date)

FileUtils.isFileOlder(File file, Date date)

  

FileUtils.iterateFiles(File directory, String[] extensions, boolean recursive)

FileUtils.lineIterator(File file, String encoding)

FileUtils.listFiles(File directory, String[] extensions, boolean recursive)

// 其他

 FileUtils.sizeOf(File file) // 获取文件或者文件夹的大小

FileUtils.getUserDirectory()// 获取用户目录文件

FileUtils.contentEquals(File file1, File file2) // 比较两个文件内容是否相同

FilenameUtils.concat(String basePath, String fullFilenameToAdd) // 合并目录和文件名为文件全路径

FilenameUtils.getFullPath(String filename) // 获取文件的目录

FilenameUtils.getPrefix(String filename) // 盘符

FilenameUtils.normalize(String filename) // 获取当前系统格式化路径

FilenameUtils.separatorsToUnix(String path) // 转换分隔符为linux系统分隔符

FilenameUtils.equalsNormalized(String filename1, String filename2) // 判断文件路径是否相同,格式化

FilenameUtils.wildcardMatch(String filename, String wildcardMatcher) // 判断文件扩展名是否和指定规则匹配

// 仅有这一个方法,及其重载方法

java.nio.file.FileStore.getUsableSpace() 

二、输入、输出

@Test

public void test() throws IOException {

 

    // XmlStreamReader

    File xml = new File("E:\\test\\data\\io\\test.xml");

    XmlStreamReader xmlReader = new XmlStreamReader(xml);

    System.out.println("XML encoding: " + xmlReader.getEncoding());

 

    String INPUT = "This should go to the output.";

 

    // TeeInputStream

    ByteArrayInputStream in = new ByteArrayInputStream(INPUT.getBytes("US-ASCII"));

    ByteArrayOutputStream out = new ByteArrayOutputStream();

 

    TeeInputStream tee = new TeeInputStream(in, out, true);

    tee.read(new byte[INPUT.length()]);

 

    System.out.println("Output stream: " + out.toString());

}

@Test

public void test8() throws IOException {

    String INPUT = "This should go to the output.";

 

    // TeeOutputStream

    ByteArrayInputStream in = new ByteArrayInputStream(INPUT.getBytes("US-ASCII"));

    ByteArrayOutputStream out1 = new ByteArrayOutputStream();

    ByteArrayOutputStream out2 = new ByteArrayOutputStream();

 

    TeeOutputStream teeOut = new TeeOutputStream(out1, out2);

    TeeInputStream teeIn = new TeeInputStream(in, teeOut, true);

    teeIn.read(new byte[INPUT.length()]);

 

    System.out.println("Output stream 1: " + out1.toString());

    System.out.println("Output stream 2: " + out2.toString());

}
1.基本功能过滤器 

名称:

NameFileFilter         基于文件名称(不带路径的文件名)

AgeFileFilter       基于最后修改时间

SizeFileFilter      基于文件尺寸
 


工具类:FileFilterUtils     

FileFilterUtils.ageFileFilter(Date cutoffDate)

FileFilterUtils.directoryFileFilter()

FileFilterUtils.filter(IOFileFilter filter, File... files)

FileFilterUtils.nameFileFilter(String name)

FileFilterUtils.prefixFileFilter(String prefix)

FileFilterUtils.trueFileFilter()

 org.apache.commons.io.comparator包下只有这四个类:

DirectoryFileComparator

NameFileComparator

都有着四个方法:

sort(List<File> files)

 

@Test

public void test() {

    String dir = "E:\\test\\data\\io\\comparator";

 

    // NameFileComparator 按名称

    File dirFile = new File(dir);

    NameFileComparator comparator = new NameFileComparator(IOCase.SENSITIVE);

    File[] files = comparator.sort(dirFile.listFiles());

 

    System.out.println("\nSorted by name files in parent directory: ");

    for (File f : files) {

        System.out.println("t" + f.getAbsolutePath());

    }

 

    // SizeFileComparator 按大小

    SizeFileComparator sizeComparator = new SizeFileComparator(true);

    File[] sizeFiles = sizeComparator.sort(dirFile.listFiles());

 

    System.out.println("\nSorted by size files in parent directory: ");

    for (File f : sizeFiles) {

        System.out.println(f.getName() + " with size (kb): " + f.length());

    }

 

    // LastModifiedFileComparator 按修改时间

    LastModifiedFileComparator lastModified = new LastModifiedFileComparator();

    File[] lastModifiedFiles = lastModified.sort(dirFile.listFiles());

 

    System.out.println("\nSorted by last modified files in parent directory: ");

    for (File f : lastModifiedFiles) {

        Date modified = new Date(f.lastModified());

        System.out.println(f.getName() + " last modified on: " + modified);

    }

}

五、Monitor文件监控

 

2、通过调用addListener()方法,为observer对象添加一个 FileAlterationListener对象。你可以通过很多种方式来创建,继承适配器类或者实现接口或者使用匿名内部类,实现所需要的监控方法。