1 FileUtils常用方法
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.apache.commons.io.filefilter.NameFileFilter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Collection;
import java.util.Date;
import java.util.List;
public class FileUtilTest {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\Test\\aa.txt");
File file2 = new File("D:\\Test\\bb.txt");
File fileDirectory = new File("D:\\Test");
//1.创建文件(获取文件)
//1.1创建文件
//1)从文件夹中获取指定文件
File file = FileUtils.getFile(fileDirectory, "aa.txt");
//2)获取获取临时文件
File tmpFile = FileUtils.getTempDirectory();
//3)获取临时文件路径
String tmpFilePath = FileUtils.getTempDirectoryPath();
//4)获取用户文件
File userFileDirectory = FileUtils.getUserDirectory();
//5)获取用户文件路径
String userFileDirectoryPath = FileUtils.getUserDirectoryPath();
//1.2 创建文件夹
//1)强制创建文件夹
FileUtils.forceMkdir(fileDirectory);
//2)强制创建父文件夹
FileUtils.forceMkdirParent(file1);
//2删除文件
//2.1删除文件夹
//1)删除文件夹中的内容(包括子文件夹和子文件)
FileUtils.cleanDirectory(new File("D:\\Test"));
//2)温和的删除文件,不抛出异常
FileUtils.deleteQuietly(file1);
//3)强制删除文件
FileUtils.forceDelete(file1);
//4)JVM退出时强制删除文件
FileUtils.forceDeleteOnExit(file1);
//3修改文件
//3.1修改文件
//1)移动文件夹
FileUtils.moveDirectory(file1,file2);
//3.2修改文件夹
//1)移动文件夹
FileUtils.moveDirectory(file1,file2);
//2)将文件移到指定的文件夹
FileUtils.moveFileToDirectory(file1,fileDirectory,true);
//3)移动文件或文件夹到指定的文件夹
FileUtils.moveToDirectory(file1,fileDirectory,true);
//4.文件查找
//1)是否递归查找指定扩展名的文件
String[] extensions = new String[]{"txt","jpg","png"};
Collection<File> fileList = FileUtils.listFiles(fileDirectory, extensions, true);
//5.读取文件
//1)根据文件获取文件输入流
FileInputStream fileInputStream = FileUtils.openInputStream(file1);
//2)读取文件到字节数组
byte[] bytes = FileUtils.readFileToByteArray(file1);
//3)读取文件到字符串
String fileContent = FileUtils.readFileToString(file1, "UTF-8");
//4)读取文件到集合中
List<String> fileContentList = FileUtils.readLines(file1, "UTF-8");
//5)获取文件大小
long fileSize = FileUtils.sizeOf(file1);
//6.写文件
//1)根据文件获取输出流
FileOutputStream fileOutputStream = FileUtils.openOutputStream(file1);
//2)获取文件输出流并指定是否追加到文件中
FileOutputStream fileOutputStream1 = FileUtils.openOutputStream(file1, true);
//3)将字节数组内容写到文件中,文件不存在时创建
FileUtils.writeByteArrayToFile(file1, bytes);
//4)将字节数组内容写到文件中,文件不存在时创建,并指定是否追加
FileUtils.writeByteArrayToFile(file1,bytes,true);
//5)将集合数据按行写到文件中
FileUtils.writeLines(file1,fileContentList);
//6)将集合数据按行写到文件中,并指定是否追加
FileUtils.writeLines(file1,fileContentList,true);
//7)将字符串写到文件中,并指定编码
FileUtils.writeStringToFile(file,fileContent,"UTF-8");
//8)将字符串数据写到文件中,并指定编码和是否追加的方式
FileUtils.writeStringToFile(file,fileContent,"UTF-8",true);
//7.复制文件
//7.1复制文件目录
//1)复制文件目录中的内容到另一个目录
File fileDir = new File("D:\\Test");
File destDir = new File("D:\\Test1");
FileUtils.copyDirectory(fileDir, destDir);
//2)复制文件目录,并指定是否保存文件日期
FileUtils.copyDirectory(fileDir,destDir,true);
//3)使用文件过滤器过滤文件
FileUtils.copyDirectory(fileDir,destDir,new NameFileFilter("aa"));
//7.2复制文件
//1)复制文件
FileUtils.copyFile(file1, file2);
//2)复制文件并指定是否保留文件日期
FileUtils.copyDirectory(file1,file2,true);
//3)复制文件夹到目录
FileUtils.copyFileToDirectory(file1,destDir);
//4)将url资源复制到指定文件
FileUtils.copyURLToFile(new URL(""), file);
//8.文件过滤
//9.文件比较与判断
//1)比较文件内容是否相同
System.out.println(FileUtils.contentEquals(file1, file2));
//2)判断一个文件夹是否包含另外一个文件夹
System.out.println(FileUtils.directoryContains(file1,file2));
//3)判断文件是否新文件
System.out.println(FileUtils.isFileNewer(file1, new Date()));
System.out.println(FileUtils.isFileOlder(file1,new Date()));
//4)判断文件和另外一个文件比是否是新的
System.out.println(FileUtils.isFileNewer(file1,file2));
System.out.println(FileUtils.isFileOlder(file1,file2));
//10.涉及文件操作的数据转换
//1)将文件集合转换为文件数组
File[] fileArray = FileUtils.convertFileCollectionToFileArray(fileList);
//2)将url资源转换为文件对象
File newUrlFiles = FileUtils.toFile(new URL(""));
//3)将多个url资源转换为文件数组
URL[] urls = new URL[]{};
File[] newUrlFiles1 = FileUtils.toFiles(urls);
//4将文件数组转化为url资源
URL[] urls1 = FileUtils.toURLs(newUrlFiles1);
//11.文件迭代
LineIterator iterator = FileUtils.lineIterator(file1, "UTF-8");
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
2 FilenameUtil常用方法
import org.apache.commons.io.FilenameUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FilenameUtilTest {
public static void main(String[] args) throws IOException {
/**
* 文件相关俗语
* C:\dev\project\file.txt
* the prefix C:\
* the path dev\project\
* the full C:\dev\project\
* the name file.txt
* the base file
* the extension txt
*/
// 1判断父目录是否包含子元素(文件或目录)
System.out.println(FilenameUtils.directoryContains("C:\\Users\\Administrator\\Downloads","C:\\Users\\Administrator\\Downloads\\oo.png"));//true
// 2判断两个文件名是否相等
System.out.println(FilenameUtils.equals("C:\\Users\\Administrator\\Downloads","C:\\Users\\Administrator\\Downloads\\00.png"));//false
// 3两个文件名标准化后判断是否相等
System.out.println(FilenameUtils.equalsNormalized("C:\\Users\\Administrator\\Downloads","C:\\Users\\Administrator\\Downloads\\00.png"));//false
// 4获取文件基本名
System.out.println(FilenameUtils.getBaseName("C:\\Users\\Administrator\\Downloads\\test00.png"));//test00
// 5获取文件扩展名
System.out.println(FilenameUtils.getExtension("C:\\Users\\Administrator\\Downloads\\test00.png"));//png
// 6获取文件完整路径,不含文件名
System.out.println(FilenameUtils.getFullPath("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\
// 7获取文件不含结尾分隔符的完整路径,不含文件名
System.out.println(FilenameUtils.getFullPathNoEndSeparator("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads
// 8获取单独的文件名和后缀
System.out.println(FilenameUtils.getName("C:\\Users\\Administrator\\Downloads\\test00.png")); // test00.png
// 9获取不含前缀的完整文件路径,不含文件名
System.out.println(FilenameUtils.getPath("C:\\Users\\Administrator\\Downloads\\test00.png"));//Users\Administrator\Downloads\
// 10获取不含前缀和结尾分隔符的完整文件路径,不含文件名
System.out.println(FilenameUtils.getPathNoEndSeparator("C:\\Users\\Administrator\\Downloads\\test00.png"));//Users\Administrator\Downloads
// 11获取文件路径前缀
System.out.println(FilenameUtils.getPrefix("C:\\Users\\Administrator\\Downloads\\test00.png"));//C;\
// 12获取文件路径前缀长度
System.out.println(FilenameUtils.getPrefixLength("C:\\Users\\Administrator\\Downloads\\test00.png"));//3
// 13获取文件扩展索引
System.out.println(FilenameUtils.indexOfExtension("C:\\Users\\Administrator\\Downloads\\test00.png"));//39
// 14获取文件最后一个分隔符索引
System.out.println(FilenameUtils.indexOfLastSeparator("C:\\Users\\Administrator\\Downloads\\test00.png"));//32
// 15判断文件扩展名是否符合给定的
List<String> suffixList = new ArrayList<String>();
suffixList.add("png");
suffixList.add("txt");
suffixList.add("xlsx");
System.out.println(FilenameUtils.isExtension("C:\\Users\\Administrator\\Downloads\\test00.png", suffixList));// true
// 16判断文件扩展名是否符合指定的
System.out.println(FilenameUtils.isExtension("C:\\Users\\Administrator\\Downloads\\test00.png","png")); //true
// 17标准化文件路径
System.out.println(FilenameUtils.normalize("C:\\Users\\Administrator\\Downloads\\test00.png")); //C:\Users\Administrator\Downloads\test00.png
// 18标准化文件路径,不含最后的结尾分隔符
System.out.println(FilenameUtils.normalizeNoEndSeparator("C:\\Users\\Administrator\\Downloads\\test00.png")); //C:\Users\Administrator\Downloads
// 19获取不含后缀的文件路径和文件名
System.out.println(FilenameUtils.removeExtension("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\test00
// 20转换文件分隔符为系统分隔符
System.out.println(FilenameUtils.separatorsToSystem("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\test00.png
// 21转换文件分隔符为Unix系统分隔符
System.out.println(FilenameUtils.separatorsToUnix("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:/Users/Administrator/Downloads/test00.png
// 22转换文件分割符为windows系统分隔符
System.out.println(FilenameUtils.separatorsToWindows("C:\\Users\\Administrator\\Downloads\\test00.png"));//C:\Users\Administrator\Downloads\test00.png
// 23 判断文件名是否符合指定的规则
System.out.println(FilenameUtils.wildcardMatch("C:\\Users\\Administrator\\Downloads\\test00.png", "*.png"));//true
}
}
3 IOUtils常用方法
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.net.URI;
import java.util.List;
public class IOUtilsTest {
public static void main(String[] args) throws Exception {
FileInputStream fileInputStream1 = new FileInputStream("D:\\Test\\aa.txt");
FileInputStream fileInputStream2 = new FileInputStream("D:\\Test\\bb.txt");
FileOutputStream outputStream = new FileOutputStream("D:\\Test\\aa.txt");
FileReader fileReader1 = new FileReader("D:\\Test\\aa.txt");
FileReader fileReader2 = new FileReader("D:\\Test\\bb.txt");
FileWriter fileWriter = new FileWriter("D:\\Test\\aa.txt");
//1静态变量
//1.1获取文件路径分隔符字符
char dirSeparator = IOUtils.DIR_SEPARATOR;
// 获取Unix系统文件路径分隔符字符
char dirSeparatorUnix = IOUtils.DIR_SEPARATOR_UNIX;
// 获取windows系统文件路径分隔符
char didSeparatorWindows = IOUtils.DIR_SEPARATOR_WINDOWS;
//1.2获取行分隔符
String lineSeparator = IOUtils.LINE_SEPARATOR;
//获取Unix系统行分隔符
String lineSeparatorUnix = IOUtils.LINE_SEPARATOR_UNIX;
//获取windows系统行分隔符
String lineSeparatorWindows = IOUtils.LINE_SEPARATOR_WINDOWS;
//2静态方法
//2.1获取输入流
//根据InputStream获取BufferedInputStream
BufferedInputStream bufferedInputStream = IOUtils.buffer(fileInputStream1);
//根据outputStream获取BufferedOutputStream
BufferedOutputStream bufferedOutputStream = IOUtils.buffer(outputStream);
//根据reader获取BufferedReader
BufferedReader bufferedReader = IOUtils.buffer(fileReader1);
//2.2按行读取数据
// 从InputStream输入流中获取行数据
List<String> lineContent = IOUtils.readLines(fileInputStream1, "UTF-8");
// 从Reader输入流中获取行数据
List<String> lineContent1 = IOUtils.readLines(fileReader1);
//2.3从输入流中获取字节数组数据
//从inputStream获取文件字节数组
byte[] data = IOUtils.toByteArray(fileInputStream1);
//从reader获取文件字节数组,并指定编码
byte[] data1 = IOUtils.toByteArray(fileReader1, "UTF-8");
//从url资源中获取文件字节数组
byte[] data2 = IOUtils.toByteArray(new URI("www...."));
//2.4从输入流中获取字符数据
//从InputStream输入流获取字符数据
char[] charData = IOUtils.toCharArray(fileInputStream1, "UTF-8");
//从reader输入流中获取字符数组
char[] charData1 = IOUtils.toCharArray(fileReader1);
//2.5从输入流中获取字符串数据
//从InputStream输入流中获取字符串数据
String stringData3 = IOUtils.toString(fileInputStream1, "UTF-8");
//从reader输入流中获取字符串数据
String stringData4 = IOUtils.toString(fileReader1);
//从url中获取字符串数据
String stringData5 = IOUtils.toString(new URI("www..."), "UTF-8");
//3写数据
//3.1将字节数组数据通过输出流写到文件
//将字节数组数据通过Writer写到文件,并指明编码
IOUtils.write(data, fileWriter, "UTF-8");
//将字节数组数据通过outputStream写到文件
IOUtils.write(charData,outputStream,"UTF-8");
//将字符数组数据通过writer写到文件
IOUtils.write(charData, fileWriter);
//3.2 将字符串通过输出流写到文件
//将字符串数据通过OutpurStream输出流,写到文件
IOUtils.write(stringData5, outputStream, "UTF-8");
//将字符串数据通过Writer输出流写到文件
IOUtils.write(stringData5,fileWriter);
//3.3将集合数据通过输出流写到文件
//将集合数据通关outputStream输出流写到文件
IOUtils.writeLines(lineContent,"UTF-8",outputStream,"UTF-8");
//将集合数据通过writer输出流写到文件
IOUtils.writeLines(lineContent,"UTF-8",fileWriter);
//4.获取文件输入迭代器
//从inputStream输入流中获取行迭代器
LineIterator lineIterator = IOUtils.lineIterator(fileInputStream1, "UTF-8");
//从Reader输入流中获取行迭代器
LineIterator lineIterator1 = IOUtils.lineIterator(fileReader1);
//5复制文件
//复制文件输入流到输出流
System.out.println(IOUtils.copy(fileInputStream1,outputStream));
//复制文件输入流到输出流,并设置缓冲大小
System.out.println(IOUtils.copy(fileInputStream1,outputStream,1024));
//复制InputStream文件到输出流Writer,并设置输出流编码
IOUtils.copy(fileInputStream1, fileWriter, "UTF-8");
//复制reader文件到writer
IOUtils.copy(fileReader1, fileWriter);
//从inputstream复制大文件到outputstream,文件大小超过2g
IOUtils.copy(fileInputStream1, outputStream);
//从reader复制大文件到writer,文件大小超过2g
IOUtils.copy(fileReader1, fileWriter);
//6IO流比较
//比较两个InputStream是否相等
System.out.println(IOUtils.contentEquals(fileInputStream1,fileInputStream2));
//判断两个reader是否相等
System.out.println(IOUtils.contentEquals(fileReader1,fileReader2));
}
}