JAVA: 使用FileUtils简化你的文件操作

前言:

在工作当中我们往往遇到很多文件的操作,我们也习惯写一些自己定义的工具类来简化文件操作,其实apache的commons的FileUtils类就是这样一个工具类,使用它能大大的简化我们对文件的操作。

 

准备工作:

1.下载jar     地址:http://commons.apache.org/proper/commons-io/download_io.cgi

2.把commons-io-2.4.jar 这个文件导入到你的项目中

 

说明:

1.由于是一个工具类使用都非常的简单 所以本文只是将其分类,展示它能够提供给我们什么。

2.习惯看api的可以直接看官方的api   传送门

3.可以看一看官方的指引  指引传送门

4.FileUtils只是commons-io的其中一个工具类

 

分类说明演示:

1.写 文件/文件夹

/* 写文件 
 * 1.这里只列出3种方式全参数形式,api提供部分参数的方法重载 
 * 2.最后一个布尔参数都是是否是追加模式 
 * 3.如果目标文件不存在,FileUtils会自动创建 
 * */  
//static void:write(File file, CharSequence data, String encoding, boolean append)   
FileUtils.write(new File("D:/a/b/cxyapi.txt"), "程序换api","UTF-8",true);  
  
//static void:writeLines(File file, Collection<?> lines, boolean append)   
List<String> lines=new ArrayList<String>();  
lines.add("欢迎访问:");lines.add("www.cxyapi.com");  
FileUtils.writeLines(new File("D:/a/b/cxyapi.txt"),lines,true);  
  
//static void:writeStringToFile(File file, String data, String encoding, boolean append)   
FileUtils.writeStringToFile(new File("D:/a/b/cxyapi.txt"), "作者:cxy", "UTF-8",true);

2.读 文件/文件夹

//读文件  
//static String:readFileToString(File file, String encoding)   
System.out.println(FileUtils.readFileToString(new File("D:/a/b/cxyapi.txt"), "UTF-8"));  
  
//static List<String>:readLines(File file, String encoding)   
System.out.println(FileUtils.readLines(new File("D:/a/b/cxyapi.txt"), "UTF-8")); //返回一个list

3.删除 文件/文件夹

//删除目录  
//static void:deleteDirectory(File directory)   
FileUtils.deleteDirectory(new File("D:/not/cxyapi"));  
  
//static boolean:deleteQuietly(File file)   
FileUtils.deleteQuietly(new File("D:/not/cxyapi")); //文件夹不是空任然可以被删除,永远不会抛出异常

4.移动 文件/文件夹

//移动文件 或 文件夹  
//static void:moveDirectory(File srcDir, File destDir)   
FileUtils.moveDirectory(new File("D:/cxyapi1"), new File("D:/cxyapi2")); //注意这里 第二个参数文件不存在会引发异常  
//static void:moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)   
FileUtils.moveDirectoryToDirectory(new File("D:/cxyapi2"), new File("D:/cxyapi3"), true);  
/* 上面两个方法的不同是: 
 * moveDirectory:D:/cxyapi2里的内容是D:/cxyapi1的内容。 
 * moveDirectoryToDirectory:D:/cxyapi2文件夹移动到到D:/cxyapi3里 
 *  
 * 下面的3个都比较简单没提供示例,只提供了api 
 * 其中moveToDirectory和其他的区别是 它能自动识别操作文件还是文件夹 
 */  
//static void:moveFileToDirectory(srcFile, destDir, createDestDir)  
//static void:moveFile(File srcFile, File destFile)   
//static void:moveToDirectory(File src, File destDir, boolean createDestDir)

5.copy

//结果是cxyapi和cxyapi1在同一目录  
FileUtils.copyDirectory(new File("D:/cxyapi"), new File("D:/cxyapi1"));   
//结果是将cxyapi拷贝到cxyapi2下  
FileUtils.copyDirectoryToDirectory(new File("D:/cxyapi"), new File("D:/cxyapi2"));  
  
//拷贝文件  
FileUtils.copyFile(new File("d:/cxyapi.xml"), new File("d:/cxyapi.xml.bak"));  
//拷贝文件到目录中  
FileUtils.copyFileToDirectory(new File("d:/cxyapi.xml"), new File("d:/cxyapi"));  
//拷贝url到文件  
FileUtils.copyURLToFile(new URL("http://www.cxyapi.com/rss/cxyapi.xml"), new File("d:/cxyapi.xml"));

6.其他

//判断是否包含文件或者文件夹  
boolean b=FileUtils.directoryContains(new File("D:/cxyapi"), new File("D:/cxyapi/cxyapi.txt"));  
System.out.println(b);  
  
//获得临时目录 和 用户目录  
System.out.println(FileUtils.getTempDirectoryPath());  
System.out.println(FileUtils.getUserDirectoryPath());  
  
//打开流,如果不存在创建文件及其目录结构  
//第二个参数表示 文件流是否是追加方式  
FileOutputStream fos=FileUtils.openOutputStream(new File("D:/cxyapi/cxyapi.txt"),true);  
fos.write(new String("欢迎访问:www.cxyapi.com\r\n").getBytes());  
fos.close();  
  
//文件 或 文件夹大小  
System.out.println(FileUtils.sizeOf(new File("D:/cxyapi")));  
System.out.println(FileUtils.sizeOfDirectory(new File("D:/cxyapi")));

 

实例:

package com.ikeepstudying.javabook.io.commonio;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;

public class IOMain {

	List<String> someTxt;
	String newWriteFileStr;
	File newWriteFile;
	File readJsonFile;
	String url;

	public IOMain() {
		url = "http://www.baidu.com/";
		newWriteFileStr = "d:\\data\\newFile.txt";
		newWriteFile = new File(newWriteFileStr);
		readJsonFile = new File("d:\\data\\1.json");
		someTxt = new ArrayList<String>();
		someTxt.add("hello world");
		someTxt.add("common io");
		someTxt.add("java牛");
	}

	public static void main(String[] args) {

		IOMain main = new IOMain();
		main.writeLines();// 换行覆盖写入
		main.writeLines(true);// 换行追加写入
		main.writeStringToFile();// 直接将字符串写入
		main.writeByteToFile();// 写入字节数组文件中
		main.write();// 普通写入
		main.readFileToString();// 读取所有文件内容到字符串
		main.readLines();
		System.out.println(FileUtils.sizeOf(new File("d:\\professionalplus_en-us_x64.exe")));
		main.copyUrlToFile();
		System.out.println(FileUtils.getUserDirectoryPath());// 获取用户主目录
		System.out.println(FileUtils.getTempDirectoryPath());
		main.listFiles();
	}

	public void listFiles() {
		File dir = new File("d:\\data");
		IOFileFilter fileFilter = new RegexFileFilter("^[0-9]{6}_[0-9]$");// 正则过滤器
		IOFileFilter fileFilter2 = new SuffixFileFilter(new String[] { "json", "pl" });// 文件类型过滤器
		IOFileFilter dirFilter = FileFilterUtils.directoryFileFilter();
		Collection<File> files = FileUtils.listFiles(dir, fileFilter, dirFilter);
		System.out.println(files.toString());
	}

	public void copyUrlToFile() {
		try {
			FileUtils.copyURLToFile(new URL(url), newWriteFile);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void readLines() {
		List<String> lines = null;
		try {
			lines = FileUtils.readLines(readJsonFile);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(lines.toString());
	}

	public void readFileToString() {
		String str = null;
		try {
			str = FileUtils.readFileToString(readJsonFile, "utf-8");
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(str);
	}

	public void write() {
		try {
			FileUtils.write(newWriteFile, "123\r\n");
			FileUtils.write(newWriteFile, "456\r\n", true);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void writeLines() {
		try {
			FileUtils.writeLines(newWriteFile, "utf-8", someTxt);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void writeLines(Boolean append) {
		try {
			FileUtils.writeLines(newWriteFile, "utf-8", someTxt, append);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void writeStringToFile() {
		try {
			FileUtils.writeStringToFile(newWriteFile, "ikeepstudying.com学无止境*^*%&^%&%^&&……&*……*");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void writeByteToFile() {
		byte[] bytes = null;
		try {
			bytes = FileUtils.readFileToByteArray(new File("d:\\data\\only1.txt"));
			FileUtils.writeByteArrayToFile(newWriteFile, bytes);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

参考:

JAVA: Java8流逐行读取文件

JAVA: 读写文件的几种方法

 

本文:JAVA: 使用FileUtils简化你的文件操作

发表评论