File类

概述

文件的本质:本质就是 文件或者文件夹路径的 抽象表现形式,就是文件指针。

重点:

凡是对文件的操作,必须先创建文件指针指向你需要操作的文件。

文件的创建之前,指针所指向的位置所对应的父目录一定要存在,否则会抛出 IOException

1、构造方法

public File(String pathname)  pathname文件路径名
	public File(String parent,String child) 父路径名 子路径名
	public File(File parent,String child)  通过父文件对象和子文件名称构造文件对象

2、文件的创建

public boolean createNewFile() 若文件不存在则创建新文件

  • 1.表示创建文件,不能够创建文件夹
  • 2.如果文件存在,创建失败
  • 3.该方法会抛出一个编译时异常 IOException

public boolean mkdir() 创建目录 make Directory

  • 1.表示创建文件夹
  • 2.如果文件存在,创建失败
  • 3.该方法不会抛出异常,操作失败,返回false

public boolean mkdirs() 创建目录及不存在的父目录

  • 1.创建连续的文件夹
  • 2.如果文件存在,创建失败
  • 3.该方法不会抛出异常,操作失败,返回false

3、文件方法

1)public boolean delete() 删除文件及空目录

注意: 删除带内容的文件夹需要递归删除,,同时递归删除之前,需要先遍历文件夹中所有的文件和文件夹,批量删除

2)文件的重命名

public boolean renameTo(File dest) 重命名为dest

注意:如果 源文件和 目标文件父目录一致,就是直接 更名;如果 源文件和 目标文件父目录不一致,就是 剪切 + 更名

3)文件其他属性功能

  • public boolean isFile() 是否文件
  • public boolean isDirectory() 是否目录
  • public boolean canRead() 是否可读
  • public boolean canWrite() 是否可写
  • public boolean exists() 是否存在
  • public boolean isHidden() 是否隐藏
  • public long length() 长度
  • public String getAbsolutePath() 绝对路径
  • public String getPath() 定义的路径
  • public String getName() file名字
  • public long lastModified() 最后一次修改时间

文件的遍历

1)public String[] list()  返回file下的文件和目录名称(字符串)

2)public File[] listFiles()  返回file下的文件和目录(文件)

3)public String[] list(FilenameFilter filter)  根据filter过滤返回file下文件和目录名称
例:
fileNames = f.list(new FilenameFilter() {			
	@Override
	public boolean accept(File dir, String name) {
		File f = new File(dir, name);
		return f.isFile() && name.endsWith(".txt");
	}
});

4)public  File[] listFiles(FileFilter filter)  根据filter过滤返回file下文件和目录
例:
files = f.listFiles(new FileFilter() {			
	@Override
	public boolean accept(File f) {
	return f.isFile() && f.getName().endsWith(".txt");
	}
});

以上用到了FileFilter过滤器,我们通过匿名内部类重写accept方法,该方法对文件进行筛选,符合的返回true。

在调用listFiles方法时,选择参数为FileFilter类的方法,listFiles(FileFilter filter),通过匿名内部类实现accept方法,故listFiles(FileFilter filter)方法执行时,accept方法为重写后的方法。

public File[] listFiles(FileFilter filter) {
        String ss[] = list();
        if (ss == null) return null;
        ArrayList<File> files = new ArrayList<>();
        for (String s : ss) {
            File f = new File(s, this);
            if ((filter == null) || filter.accept(f))
                files.add(f);
        }
        return files.toArray(new File[files.size()]);
    }
//自制接口后调
interface A{
	boolean fun(String s);  //接口A中唯一的抽象方法,未实现
}
public class Test {
	public static void main(String[] args) {
		
		test(new A(){
			public boolean fun(String s) {  
//通过匿名内部类实例化接口A,同时改写fun()方法,改写后,该test()方法中调用的fun()为重写后的fun()
				if(s==null) {
					return false;
				}else {
					return true;
				}
			}
		});

	}
	public static void test(A a) {  //test方法,需传入A接口的实例
		String s = "";  //s为空时,无打印输出,s不为空时,打印ck
		if(a==null || a.fun(s)) {   //调用A接口的方法
			System.out.println("ck");
		}
	}
}