文件操作
一.commons-io概述
1.jar包
二.FileUtils
1.文件创建
forceMkdir(File directory)'
-
创建新文件夹,如果其祖先目录不存在,则一并创建其祖先文件夹,如果新创建的文件夹存在,则不会不会不会进行覆盖替换
-
directory参数表示是需要创建的文件夹File对象
-
//因为项目中不存在ABC目录,则全部都被新创建
FileUtils.forceMkdir(new File("A/B/C"));
forceMkdirParent(File file)
- 根据文件对象创建所有祖先文件夹,但不会创建文件本身
- file参数表示是文件File对象
//创建一个新的文件对象,项目中不存在DE文件夹
File file=new File("D/E/test1.txt");
//创建file对象的所有不存在的祖先目录(D文件和E文件夹,这里不会创建test1.txt)
FileUtils.forceMkdirParent(file);
//创建新文件test1.txt[createNewFile方法如果祖先目录不存在则会报错]
file.createNewFile();
- 提炼创建新文件方法
//根据路径创建新文件(其所有祖先目录均被创建)
public static void createFile(String filePath) throws IOException {
//根据文件路径创建一个新的文件对象
File file=new File(filePath);
//创建file对象的所有不存在的祖先文件夹
FileUtils.forceMkdirParent(file);
//创建新文件
file.createNewFile();
}
2.文件删除
-
deleteQuietly(File file)
- 删除文件丶删除文件夹本身及其所有子孙文件夹和文件
- 删除失败或者发生异常程序不会抛出异常,只有返回值为true才算真正删除成功(不建议使用)
-
forceDelete(File file)
- 删除文件丶删除文件夹本身及其所有子孙文件夹和文件
- 删除过程中出错会抛出异常,没有返回值
- 与
File.delete()
区别在于被删除的文件夹不能包含子项
-
cleanDirectory(File directory)
- 清空指定文件夹directory内的所有文件和文件夹,但不会删除directory本身
3.文件剪切
moveFile(File srcFile,File destFile)
- 剪切文件并复制和重命名
- 两个参数都只能是文件,不能是文件夹
- 如果复制目标的文件夹不存在会自动创建
- 如果剪切和复制都是同一个文件夹则只进行重命名操作
//被剪切的文件对象
File src=new File("D/E/test1.txt");
//复制到目标地方的文件对象,这里F文件夹是不存在的
File des=new File("D/F/test2.txt");
//把test1.txt文件剪切到了D/F文件夹下(自动创建不存在的文件夹F),并把文件名称改为test2
FileUtils.moveFile(src, des);
moveDirectory(File srcDir, File destDir)
- 剪切自身文件夹和其子项到指定文件夹并重命名
- 两个参数都只能是文件夹,不能是文件
- 如果复制目标的文件夹不存在会自动创建
- 如果剪切和复制都是同一个文件夹则只进行重命名操作
//被剪切的文件夹
File srcDir=new File("D");
//复制到目标地方的文件夹,这里K文件夹是不存在的
File desDir=new File("K/L");
//把D文件夹及其子项剪切到K文件夹下(自动创建不存在的文件夹K),并把原来的文件夹名称D改为L
//假如D里面有E/a.txt,则剪切完结果是K/L/E/a.txt
FileUtils.moveDirectory(srcDir, desDir);
moveToDirectory(File src, File destDir, boolean createDestDir)
- 剪切文件或文件夹到指定文件夹中
- 剪切文件夹是包括自身和其所有子孙文件夹或文件
- src可以是文件或文件夹,destDir只能是文件夹
- createDestDir参数表示destDir中某些目录不存在是否创建
//被剪切的文件
File srcFile=new File("D/E/test1.txt");
//复制到目标地方的文件夹(不能是文件),这里F文件夹是不存在的
File desDir=new File("D/F");
//把test1.txt文件剪切到了D/F文件夹下,如果参数位true会自动创建不存在的文件夹F
FileUtils.moveToDirectory(srcFile, desDir,true);
4.文件复制
-
copyFile(File srcFile, File destFile)
- 复制文件并重命名,目标文件夹不存在则自动创建
- 其他跟
moveFile()
事项一样
-
copyDirectory(File srcDir, File destDir)
- 复制文件夹及其子项到指定文件夹下,目标文件夹不存在则自动创建
- 其他跟
moveDirectory()
事项一样
-
copyToDirectory(File src, File destDir)
- 复制文件或文件夹到指定文件夹中,目标文件夹不存在则自动创建
- 其他跟
moveToDirectory()
事项一样
5.文件读取
readFileToString(File file, Charset encoding)
- 以指定编码方法读取文件内容放进字符串变量中
- 编码格式要根据文件本身的编码
//以GBK编码读取test1.txt文件内容
String str=FileUtils.readFileToString(new File("A/test1.txt"), "GBK");
List<String> readLines(File file, String encoding)
- 用指定编码格式读取文件的每行内容进一个字符串中,最终返回一个字符串集合
//以UTF-8编码读取test1.txt文件内容,把每行内容放进一个字符串中,读完所有行就返回一个字符串集合
List<String> list=FileUtils.readLines(new File("A/test1.txt"), "UTF-8");
6.文件写入
writeStringToFile(File file, String data, String encoding, boolean append)
- 以指定编码格式打开文件写入字符串
- 如果文件不存在,则自动创建
- append参数表示是否追加内容到文件末尾,true为追加,false为覆盖原有内容,如果不填写append参数默认位ffalse
//以指定编码格式打开文件写入字符串
FileUtils.writeStringToFile(new File("A/test1.txt"), "哈哈哈", "UTF-8", true);
writeLines(File file, String encoding, Collection<?> lines, boolean append)
- 以指定编码格式打开文件,把集合中每项作为行内容写进文件中
- 其他事项跟
writeStringTofile()
一样
//把集合中每项作为行内容写进文件
List<String> list=new ArrayList<String>();
list.add("你");
list.add("好");
list.add("world");
FileUtils.writeLines(new File("A/test1.txt"), "UTF-8",list,true);
三.FileNameUtils
1.获取文件路径信息
String file1="F:/A/B/test.txt";
//文件的纯名称
//baseName:test
String baseName=FilenameUtils.getBaseName(file1);
//文件扩展名
//extension:txt
String extension=FilenameUtils.getExtension(file1);
//文件物理路径的前缀
//prefix:F:/
String prefix=FilenameUtils.getPrefix(file1);
//不包含前缀的文件目录
//path:A/B/
String path=FilenameUtils.getPath(file1);
//不包含前缀并且不包含最后目录分隔符的文件目录
//pathNoEndSeparator:A/B
String pathNoEndSeparator=FilenameUtils.getPathNoEndSeparator(file1);
//包含前缀的文件目录
//fullPath:F:/A/B/
String fullPath=FilenameUtils.getFullPath(file1);
//包含前缀并且不包含最后目录分隔符的文件目录
//fullPathNoEndSeparator:F:/A/B
String fullPathNoEndSeparator=FilenameUtils.getFullPathNoEndSeparator(file1);
//扩展名在文件路径file1中的下标(这里是寻找点号.的下标)
//index_extension:11
int index_extension=FilenameUtils.indexOfExtension(file1);
//最后一个目录分隔符在文件路径中的下标
//index_lastSeparator:6
int index_lastSeparator=FilenameUtils.indexOfLastSeparator(file1);
2.判断文件扩展名
String filename="F:/A/B/test.txt";
List<String> list=new ArrayList<String>();
list.add("gif");
list.add("png");
//判断文件的扩展名
//true
boolean flag1 = FilenameUtils.isExtension(filename, "txt");
//判断文件扩展名是否符合字符串数组中的任意一个
//true
boolean flag2 = FilenameUtils.isExtension(filename, new String[] {"txt","jpg"});
//判断文件扩展名是否符合字符串集合中的任意一个
//false
boolean flag3 = FilenameUtils.isExtension(filename, list);
四.IOUtils
操作流的工具类