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