在Java8中,可以使用Files.lines读取文件的流。 c://lines.txt – 用于测试的简单文本文件 line1 line2 line3 line4 line5…
June 1, 2017
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(); } } }
参考: