一.操作文件
1.File对象的创建
创建方式:
File(String pathname) 文件的抽象路径名(文件的路径+文件名)
File(String parent, String child) 父路径+文件名
File(File parent, String child) 文件夹+文件
例子:
File file = new File("G:\\java学习资料\\java学习笔记\\IO\\bb");
File file = new File("G:\\java学习资料\\java学习笔记\\IO","bb");
File file1 = new File("G:\\java学习资料\\java学习笔记\\IO");
String child = "bb";
File file1 = new File(file1, child);
2.创建文件夹(文件)
有好几个创建文件的方法,但是都有区别,具体看一下代码。
boolean createNewFile() :只创建文件
boolean createNewFile()
1. 需要File对象调用:根据File对象中的pathname来创建文件
2. 如果文件已经存在,返回false
3. 如果文件路径不存在,抛出IO异常
4. 此方法只能够创建文件(传统理解的文件,不会创建文件夹)
//案例
public static void main(String[] args) throws IOException {
File file = new File("G:\\java学习资料\\java学习笔记\\IO\\bb");
boolean result = file.createNewFile();
if(result){//该文件不存在
System.out.println("创建成功!");
}else {//该文件存在
System.out.println("创建文件失败");
}
}
boolean mkdir():只创建对应文件夹
boolean mkdir()
1. 需要File对象调用:根据File对象中的pathname来创建文件夹
2. 如果文件夹已经存在,返回false
3. 如果路径不存在,返回false,没有抛出异常
public static void main(String[] args) throws IOException {
File file = new File("G:\\java学习资料\\java学习笔记\\O");
boolean result = file.mkdir();
if(result){//该文件不存在
System.out.println("文件夹创建成功!");
}else {//该文件存在
System.out.println("创建文件夹失败");
}
}
boolean mkdirs() :自动创建路径文件夹
boolean mkdirs()
1.如果路径不存在,会自动先创建路径所需的文件夹
//创建多级目录
public static void main(String[] args) {
File directory = new File("path/to/directory");
boolean created = directory.mkdirs();
if (created) {
System.out.println("目录创建成功");
} else {
System.out.println("目录已存在或无法创建");
}
}
3.删除文件(包括文件夹)
boolean delete() :删除文件,只能删除空的文件夹
/**
* 使用递归删除文件夹
* @author EDY
*
*/
public class test_04 {
public static void main(String[] args) throws IOException {
File file = new File("G:\\测试文件");
Boolean result = deleteAll(file);
if(result){
System.out.println("删除文件夹成功!");
}else {
System.out.println("删除文件夹失败!");
}
}
private static Boolean deleteAll(File file) {
if(file.isDirectory()){
File[] files = file.listFiles();
//文件夹不为空
if(files.length>0){
for (File file1 : files) {
deleteAll(file1);
}
}
}
return file.delete();
}
}
二.File对象的常用方法
1.判断系列方法
boolean isDirectory() 判断是否是一个目录
boolean isFile() 判断是否是一个文件
boolean exists() 测试此抽象路径名表示的文件或目录是否存在
2.基本的list方法
static File[] listRoots() 列出可用的文件系统根(操作系统上面的盘符)
String[] list() 返回当前的文件夹对象下面一层的所有的文件(文件夹)的名字
File[] listFiles() 返回当前的文件夹对象下面一层的所有的文件(文件夹,以及文件)(File对象的形式)
三.文件和文件名过滤器
String[] list(FilenameFilter filter)
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
1.自定义过滤器(通过String.endwith())
获取指定后缀名的文件
//递归的方式
public static void main(String[] args) throws IOException {
String suffix ="txt";
ArrayList<File> fileList = new ArrayList<>();
filters(fileList,file,suffix);
System.out.println(fileList);
}
private static void filters(List<File> fileList, File file,String suffix) {
if(file.isDirectory()){
File[] listFiles = file.listFiles();
for (File listFile : listFiles) {
filters(fileList,listFile,suffix);
}
}
if(file.getName().endsWith(suffix)){
fileList.add(file);
}
}
2.文件名过滤器
- 参数类型:接受一个
FilenameFilter
对象作为参数。 - 过滤方式:通过自定义的
FilenameFilter
实现类来筛选文件。你需要实现FilenameFilter
接口中的boolean accept(File dir, String name)
方法,根据自己的过滤逻辑返回true
或false
来决定是否接受该文件。 - 返回结果:返回满足过滤条件的文件数组,如果没有匹配的文件,则返回
null
。
/**
* 文件名过滤器
* @param file
* @param suffix
* @return
*/
private static File[] fileNameFilter(File file,String suffix) {
return file.listFiles((dir, name) -> name.endsWith(suffix));
}
3.文件过滤器
- 参数类型:接受一个
FileFilter
对象作为参数。 - 过滤方式:通过自定义的
FileFilter
实现类来筛选文件。你需要实现FileFilter
接口中的accept(File pathname)
方法,根据自己的过滤逻辑返回true
或false
来决定是否接受该文件。 - 返回结果:返回满足过滤条件的文件数组,如果没有匹配的文件,则返回
null
。
/**
* 文件名过滤器
* @param file
* @param suffix
* @return
*/
private static File[] fileNameFilter(File file,String suffix) {
return file.listFiles((dir, name) -> name.endsWith(suffix));
}