apache的IO包中的FileUtils方法的使用

首先非常感谢apache这个公司给我们免费开源了这个IO包,我们才能学习使用开发出我们想要的产品,知道这个包已经很多年了一直都是在用固定的几个方法,对里面很多方法都不会用,今天有空我就来研究试用下这里的Api 顺便也学习下高大上的技术,废话不多说了,下面我就挨个的演示下FileUtils里的所有方法。

IO包对应的版本和JDK版,我这里用的是最新的版本也就是2.6版本

jar包自己去下载,下载dizh地址:

http://commons.apache.org/proper/commons-io/download_io.cgi

1、public static String byteCountToDisplaySize(final long size) {}

这个方法的作用:将文件的字节大小转换成我们显示的字符串,比如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
	}

}

通过以上结果一目了然就能知道具体的用法了吧。

2、 public static String getTempDirectoryPath() {}

这个方法的作用:获取系统的临时目录路径

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\
	}

}

3、public static String getUserDirectoryPath() {

作用:获取用户的主目录

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
	}

}

4、 public static long checksumCRC32(final File file) throws IOException {}

方法的作用:得到文件的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();
		}
	}
}

5、public static boolean contentEquals(final File file1, final File file2) throws IOException {}

作用:比较两个文件的内容是否相同,相同返回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();
		}
	}
}

6、public static boolean contentEqualsIgnoreEOL(final File file1, final File file2, final String charsetName){}

作用:比较两个文件的内容,忽略换行符,第三个参数编码集

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();
		}
	}
}

7、public static void cleanDirectory(final File directory) throws IOException {}

作用: 清空文件夹中的所有文件和子文件夹,文件夹本身不会被清除

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();
		}
	}
}

8、public static boolean isFileOlder(final File file, final Date date) {}

作用:判断文件是否在某个日期之后创建的,如果为真返回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();
		}
	}
}

10、public static void deleteDirectory(final File directory) throws IOException {}

作用:删除目录里的文件和子文件夹,也会删除目录本身,和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();
		}
	}
}

11、public static boolean deleteQuietly(final File file) {}

作用:删除一个目录或者一个文件,如果这个目录或者目录不存在不会抛出异常这个方法跟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();
		}
	}
}

12、public static void forceDelete(final File file) throws IOException {}

作用:删除目录和文件以及子目录,但是这个目录或文件占用是还是不会删除的,测试后发现跟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();
		}
	}
}

13、public static void forceDeleteOnExit(final File file) 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 file2 = new File("C:\\Users\\Administrator\\Desktop\\sign\\");
			//当JVM退出时,把file对象删除。如果是目录对象则递归删除子目录,跟delete的区别是一个是立马执行 一个是JVM退出后执行 forceDeleteOnExit 这个用来删除临时文件或缓存文件用的
			FileUtils.forceDeleteOnExit(file2);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

14、public static void moveDirectoryToDirectory(final File src, final File destDir, final boolean createDestDir)

            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();
		}
	}
}

15、public static void touch(final File file) 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\\1.txt");
			FileUtils.touch(file1);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

16、public static byte[] readFileToByteArray(final File file) throws IOException {}

作用:读取文件的内容到字节数组里

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();
		}
	}
}

17、 public static String readFileToString(final File file, final Charset encoding) throws IOException {}

作用:读取文件的内容转换成字符串

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();
		}
	}
}

18、public static List<String> readLines(final File file, final Charset encoding) throws IOException {}

        public static List<String> readLines(final File file, final String encoding) throws IOException {}

作用:一行一行的读取文件里的内容然后存储到List<String> 里.这两个方法作用相同

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<String> strList =FileUtils.readLines(file1,StandardCharsets.UTF_8);
			for(String str:strList){
				System.out.println(str);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

19、 public static void write(final File file, final CharSequence data, final Charset encoding, final boolean append){}

作用:写一个字符串或字符到文件里,第一个参数文件对象,第二个参数写入是数据 第三个参数编码集 第四个参数是否追加到文件的后面,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();
		}
	}
}

20、public static void writeByteArrayToFile(final File file, final byte[] data, final boolean append){}

       public static void writeByteArrayToFile(final File file, final byte[] data, final boolean append){}

       public static void writeByteArrayToFile(final File file, final byte[] data, final int off, final int len,
                                            final boolean append) throws IOException {}

作用:写字节数组到文件里,都是重载的方法,参数不一样 功能都是相同的

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();
		}
	}
}

21、public static File toFile(final URL url) {}

作用: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();
		}
	}
}

22、public static File getFile(final String... names) {}

        public static File getFile(final File directory, final String... names) {} 重载的方法作用一样。

作用:拼接路径返回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了。

23、 public static Iterator<File> iterateFiles( final File directory, final String[] extensions, final boolean recursive) {}

        public static Iterator<File> iterateFilesAndDirs(final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter) {}

       public static Iterator<File> iterateFiles( final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter) {}

作用:遍历某个目录获取目录里的文件和文件夹,这三个接口也是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<File> 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

24、 public static FileInputStream openInputStream(final File file) throws IOException {}

        public static FileOutputStream openOutputStream(final File file) throws IOException {}

        public static FileOutputStream openOutputStream(final File file, final boolean append) throws IOException {}

作用:方便的打开输入输出流,有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
 

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值