首先非常感谢apache这个公司给我们免费开源了这个IO包,我们才能学习使用开发出我们想要的产品,知道这个包已经很多年了一直都是在用固定的几个方法,对里面很多方法都不会用,今天有空我就来研究试用下这里的Api 顺便也学习下高大上的技术,废话不多说了,下面我就挨个的演示下FileUtils里的所有方法。
IO包对应的版本和JDK版,我这里用的是最新的版本也就是2.6版本
jar包自己去下载,下载dizh地址:
http://commons.apache.org/proper/commons-io/download_io.cgi
这个方法的作用:将文件的字节大小转换成我们显示的字符串,比如1024转换后1kb
以下是例子:
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
String str = FileUtils.byteCountToDisplaySize(1024);
String str1 = FileUtils.byteCountToDisplaySize(1024*1024);
String str2 = FileUtils.byteCountToDisplaySize(1024*1024*1024);
String str3 = FileUtils.byteCountToDisplaySize(1024*1024*1024);
System.out.println("str= "+str);
System.out.println("str1= "+str1);
System.out.println("str2= "+str2);
System.out.println("str3= "+str3);
//执行结果如下:
//str=1 KB
//str1=1 MB
//str2=1 GB
//str3=1 GB
}
}
通过以上结果一目了然就能知道具体的用法了吧。
这个方法的作用:获取系统的临时目录路径
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
//获取系统的临时目录路径
String s = FileUtils.getTempDirectoryPath();
System.out.println(s);
//执行后的结果:C:\Users\ADMINI~1\AppData\Local\Temp\
}
}
作用:获取用户的主目录
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
//获取用户的主目录路径
String s = FileUtils.getUserDirectoryPath();
System.out.println(s);
//执行后的结果:C:\Users\Administrator
}
}
方法的作用:得到文件的CRC32的值,用来校验文件是否是同一个文件用的,类似于MD5
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import java.util.zip.CRC32;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
long csum = FileUtils.checksum(new File("C:\\Users\\Administrator\\Desktop\\Test.java"), new CRC32()).getValue();
System.out.println(csum);
//运行结果2421846926
} catch (IOException e) {
e.printStackTrace();
}
}
}
作用:比较两个文件的内容是否相同,相同返回true 不相同返回false
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\Test.java");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\T3st.java");
//比较两个文件的内容是否相同 相同返回true 不相同返回false
boolean isEquals = FileUtils.contentEquals(file1, file2);
System.out.println(isEquals);
//运行结果true
} catch (IOException e) {
e.printStackTrace();
}
}
}
作用:比较两个文件的内容,忽略换行符,第三个参数编码集
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\Test.java");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\T3st.java");
//比较两个文件的内容是否相同 相同返回true 不相同返回false
boolean isEquals = FileUtils.contentEqualsIgnoreEOL(file1, file2, "UTF-8");
System.out.println(isEquals);
//运行结果true
} catch (IOException e) {
e.printStackTrace();
}
}
}
作用: 清空文件夹中的所有文件和子文件夹,文件夹本身不会被清除
package com.ptyt.io.demo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign");
//清空文件夹中的所有文件和子文件夹,文件夹本身不会被清除
FileUtils.cleanDirectory(file2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
作用:判断文件是否在某个日期之后创建的,如果为真返回true 为假返回false
9、 public static boolean isFileNewer(final File file, final Date date) {}
作用:判断文件是否在某个日期之前创建的,如果为真返回true 为假返回false
package com.ptyt.io.demo;
import java.io.File;
import java.text.SimpleDateFormat;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\123.txt");
// 清空文件夹中的所有文件和子文件夹,文件夹本身不会被清除
String string = "2018-07-10 10:00:00:023";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); // 最后三个大写SSS代表毫秒,写1个表示前边都不补0,写两个只有是两位0补全
boolean b = FileUtils.isFileOlder(file2, sdf.parse(string));
boolean b1 = FileUtils.isFileNewer(file2, sdf.parse(string));
System.out.println(b);
System.out.println(b1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:删除目录里的文件和子文件夹,也会删除目录本身,和cleanDirectory的区别就是是否删除目录本身
例子:
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
//目录和目录里的文件和子文件夹
FileUtils.deleteDirectory(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:删除一个目录或者一个文件,如果这个目录或者目录不存在不会抛出异常这个方法跟deleteDirectory的区别就是是否抛出异常,deleteDirectory这中方式删除时传的目录不存在或为空是会抛IO异常,deleteQuietly这种方式不会抛出异常
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
////删除一个目录或者一个文件,如果这个目录或者目录不存在不会抛出异常
FileUtils.deleteQuietly(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:删除目录和文件以及子目录,但是这个目录或文件占用是还是不会删除的,测试后发现跟deleteDirectory() 跟这个方法一样的,不要被这里的force误解了,文件被其他进程占用是你在删除这个文件还是会失败的,不会强制删除的。
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
FileUtils.forceDelete(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
例子:
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
//当JVM退出时,把file对象删除。如果是目录对象则递归删除子目录,跟delete的区别是一个是立马执行 一个是JVM退出后执行 forceDeleteOnExit 这个用来删除临时文件或缓存文件用的
FileUtils.forceDeleteOnExit(file2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
throws IOException {}
作用:剪切目录,第三个参数是否创建目录
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\sign1\\");
FileUtils.moveDirectoryToDirectory(file1, file2, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:创建文件,如果文件已经存在修改文件的时间
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
FileUtils.touch(file1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:读取文件的内容到字节数组里
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
byte[] b =FileUtils.readFileToByteArray(file1);
System.out.println(new String(b,StandardCharsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:读取文件的内容转换成字符串
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
String str =FileUtils.readFileToString(file1,StandardCharsets.UTF_8);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:一行一行的读取文件里的内容然后存储到List
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
List strList =FileUtils.readLines(file1,StandardCharsets.UTF_8);
for(String str:strList){
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:写一个字符串或字符到文件里,第一个参数文件对象,第二个参数写入是数据 第三个参数编码集 第四个参数是否追加到文件的后面,true表示追加到后面 false表示覆盖以前的内容
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
FileUtils.write(file1, "hello word!",StandardCharsets.UTF_8,false);
String str = FileUtils.readFileToString(file1, StandardCharsets.UTF_8);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:写字节数组到文件里,都是重载的方法,参数不一样 功能都是相同的
package com.ptyt.io.demo;
import java.io.File;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\sign\\1.txt");
byte b[] ="Hello words!".getBytes();
FileUtils.writeByteArrayToFile(file1, b, false);
String str = FileUtils.readFileToString(file1, StandardCharsets.UTF_8);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:URL转File,henj很简单直接看例子
package com.ptyt.io.demo;
import java.io.File;
import java.net.URL;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
URL url = new URL("file:/C:/Users/Administrator/Desktop/sign/1.txt");
File file = FileUtils.toFile(url);
System.out.println(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作用:拼接路径返回File对象,实际开发中我们总是为了/或\头疼,拼接路径要么少/要么多/ 这个方法专门geig给我们解决这个问题。
package com.ptyt.io.demo;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
private static final String MAIN_PATH = "C:/Users/Administrator/Desktop/sign";
public static void main(String[] args) {
try {
File file = FileUtils.getFile(MAIN_PATH,"1","2","3","4","5","6","7","8","9","10");
System.out.println(file);
//执行后的结果
//C:\Users\Administrator\Desktop\sign\1\2\3\4\5\6\7\8\9\10
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行后的结果 C:\Users\Administrator\Desktop\sign\1\2\3\4\5\6\7\8\9\10 以后我们再也不会为斜杠或反斜杠头疼了,从此不会在这里出bug了。
作用:遍历某个目录获取目录里的文件和文件夹,这三个接口也是IO包里的核心说句实话tai太强大了,这里一两句话说不清楚有空开个专题要yanj研究的三个接口,这里我简单的举个例子。
package com.ptyt.io.demo;
import java.io.File;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
private static final String MAIN_PATH = "C:/Users/Administrator/Desktop/sign";
public static void main(String[] args) {
try {
File file = FileUtils.getFile(MAIN_PATH);
Iterator fileList = FileUtils.iterateFiles(file, new String[]{"txt"}, true);
while (fileList.hasNext()) {
File file1 = (File) fileList.next();
System.out.println(file1);
}
//执行后的结果
//C:\Users\Administrator\Desktop\sign\1\1.txt
//C:\Users\Administrator\Desktop\sign\1\3\3.txt
//C:\Users\Administrator\Desktop\sign\2.txt
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个例子很简单就是遍历目录下扩展名为txt的所有文件,第三个参数是否遍历子目录,如果为true 遍历整个子目录 false不遍历整个子目录。
执行后的结果:
C:\Users\Administrator\Desktop\sign\1\1.txt
C:\Users\Administrator\Desktop\sign\1\3\3.txt
C:\Users\Administrator\Desktop\sign\2.txt
作用:方便的打开输入输出流,有java基础的一看就懂(秒懂)传统的java 打开输入输出流chua创建File 再创建FileOutStream 传进去也可以用 但是判断sh是否是目录是否为空的比较麻烦,这里专门做了这些工作让chen程序员用的更shua爽而已,举个例子:
package com.ptyt.io.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
private static final String MAIN_PATH = "C:/Users/Administrator/Desktop/sign";
public static void main(String[] args) {
try {
File file = FileUtils.getFile(MAIN_PATH,"2.txt");
//打开一个输入流
FileInputStream fileInputStream = FileUtils.openInputStream(file);
//打开一个输出流
FileOutputStream outPutStream = FileUtils.openOutputStream(file);
//打开一个内容追加的输出流
FileOutputStream outPutStream1 = FileUtils.openOutputStream(file, true);
System.out.println(fileInputStream);
System.out.println(outPutStream);
System.out.println(outPutStream1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
得到 FileOutputStream和FileInputStream后剩下的工作交给程序员处理了你想写文件还是读取文件。
25、FileUtils里的常量
举例:
package com.ptyt.io.demo;
import java.math.BigInteger;
import org.apache.commons.io.FileUtils;
public class FileUtilsTest {
public static void main(String[] args) {
try {
long size = 0;
BigInteger bi =null;
size =FileUtils.ONE_KB;
bi =FileUtils.ONE_KB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_MB;
bi =FileUtils.ONE_MB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_GB;
bi =FileUtils.ONE_GB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_TB;
bi =FileUtils.ONE_TB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_PB;
bi = FileUtils.ONE_PB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
size =FileUtils.ONE_EB;
bi =FileUtils.ONE_EB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(size)+" "+FileUtils.byteCountToDisplaySize(bi));
bi =FileUtils.ONE_ZB;
System.out.println(FileUtils.byteCountToDisplaySize(bi));
bi =FileUtils.ONE_YB;
System.out.println(FileUtils.byteCountToDisplaySize(bi));
bi =FileUtils.ONE_PB_BI;
System.out.println(FileUtils.byteCountToDisplaySize(bi));
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果:
1 KB 1 KB
1 MB 1 MB
1 GB 1 GB
1 TB 1 TB
1 PB 1 PB
1 EB 1 EB
1024 EB
1048576 EB
1 PB