File类: 文件和目录 路径名的抽象表达形式。简单来说一个file类的对象对应一个文件或者一个目录(File 表示的是一个文件路径名字符串所表示的文件或者目录)
路径:相对路径和绝对路径—绝对路径是完整的路径名,不需要其他信息就可以定位他所表示的文件
相对路径必须使用取自其他路径名(相对于谁)的信息进行解释
路径名的表示:
类Unix:对于Unix平台,绝对路径名的前缀始终是“/”,相对路径名没有前缀 —因为没有分区
例如: 绝对路径:/usr/local/bin
相对路径:dir/a.txt
windows:绝对路径 盘符:\,相对路径没有 盘符:\ 前缀的路径
获取当前相对路径的目录:System.getProperty("user.dir");
public class Demo1Basic {
public static void main(String[] args) {
//获取名为use.dir的系统属性
String user = System.getProperty("user.dir");
System.out.println(user);
}
}
构造方法:
File (String pathname)
public static void main(String[] args) throws IOException {
//File (String pathname)
//pathname : 表示抽象路径
String filePath = "D:\\Java-file\\download.txt";
File file = new File(filePath);
System.out.println(file);
//File对象仅表示抽象文件---说明File类所谓抽象的含义
filePath = "E:/dir/c.txt";
//该路径文件实际不存在
File nullFile = new File(filePath);
//该File对象对应一个的是一个抽象文件的路径名字符串表示的逻辑上的文件
//也就是说一个File对象 和抽象路径名等价
System.out.println(nullFile);
}
File(String parent ,String child) //可以用来在父目录下建子目录或子文件
//File(String parent ,String child)
//parent :目标文件父目录的路径
//child : 目标文件的文件名
File file1 = new File("d:\\Java-file", "download.txt");
System.out.println(file1);
File(File parent,String child)
//File(File parent,String child)
File parentFile = new File("D:\\Java-file");
File file2 = new File(parentFile, "download.txt");
System.out.println(file2);
API:
创建功能:
//物理创建文件
public boolean createNewFile()
File file3 = new File("d:\\Java-file\\third.txt");
boolean newFile = file3.createNewFile();
System.out.println(newFile);
//物理创建单个目录
public boolean mkdir()
File file4 = new File("d:\\Java-file\\log");
boolean mkdir = file4.mkdir();
System.out.println(mkdir);
//物理创建所有目录
public boolean mkdirs()
File file5 = new File("d:\\Java-file\\dir\\a");
boolean mkdirs = file5.mkdirs();
System.out.println(mkdirs);
mkdir 和mkdirs创建目录的区别:
1、mkdir 仅能在已经存在的目录下,创建新的目录
2、mkdirs 当要创建的目标目录的父目录不存在的时候,他会将不存在的目标目录的父目录连同目标目录一起创建好
删除功能:(物理删除)
public boolean delete()
删除此抽象路径名表示的文件或目录,删除目录时需要被删除目录为空才可以删除
public class Demo1Delete {
public static void main(String[] args) {
//删除空目录
File file = new File("D:\\Java-file\\log");
boolean delete = file.delete();
System.out.println(delete); //true
//删除非空目录
File file1 = new File("D:\\Java-file\\dir");
boolean delete1 = file1.delete();
System.out.println(delete1); //false
}
}
重命名功能:
public boolean renameTo(File file)
1、当源文件和修改之后的目标文件在同一目录的时候,效果只是重命名
2、当源文件和修改之后的目标文件不在同一目录的时候:
a、移动文件,将源文件移动到目标文件的位置上
b、重命名
public class Demo1Rename {
public static void main(String[] args) {
//同一个目录下
//要把"D:\Java-file\third.txt" -> "D:\Java-file\first.txt"
//创建File对象,表示要修改的文件
File file = new File("D:\\Java-file\\third.txt");
//创建File对象,表示修改之后的文件
File file1 = new File("D:\\Java-file\\first.txt");
boolean b = file.renameTo(file1);
System.out.println(b);
//不在同一个目录下
File file2 = new File("D:\\Java-file\\dir\\aaa.txt");
boolean b1 = file1.renameTo(file2);
System.out.println(b1);
}
}
判断功能:
public boolean isFile() //判断File对象是否表示的是一个文件
public boolean isDirectory() //判断File对象是否表示的是一个目录
public boolean exists() //判断File对象表示的文件是否物理存在
public boolean canRead() //判断File对象表示的文件是否可读
public boolean canWrite() //判断File对象表示的文件是否可写
public boolean isHidden() //判断File对象表示的文件是否被隐藏
public class Demo3Juge {
public static void main(String[] args) {
File file = new File("D:\\Java-file\\third.txt");
boolean exists = file.exists();
System.out.println(exists);
System.out.println(file.isDirectory());
System.out.println(file.isDirectory());
}
}
基本获取功能:
public file getAbsoluteFile()//获取file 对象表示的抽象文件的绝对路径
public String getPath()//获取file对象表示的抽象文件的路径字符串
public String getName()//获取文件或者目录的名字
public long length()//返回抽象路径名表示的文件的长度,如果是目录,则返回值不确定(按字节)
public long lastModified()//文件最近修改的时间
public class Demo4Get {
public static void main(String[] args) throws IOException {
System.out.println(System.getProperty("user.dir"));
File file = new File("a.txt");
String absolutePath = file.getAbsolutePath();
System.out.println(absolutePath);
String path = file.getPath();
System.out.println(path);
String name = file.getName();
System.out.println(name);
long lastModified = file.lastModified();
Date date = new Date(lastModified);
System.out.println(date);
long length = file.length();
System.out.println(length);
}
}
高级获取功能:
public String[] list()
//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录的名字
//如果此抽象路径名不表示一个目录,那么此方法返回null
public static void main(String[] args) {
File dir = new File("D:\\Java-file");
String[] list = dir.list();
System.out.println(Arrays.toString(list));
File file = new File("D:\\Java-file/first.txt");
String[] list1 = file.list();
System.out.println(list1);
}
public File[] listFiles()
//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件或目录对应的File对象
//如果此抽象路径名不表示一个目录,那么此方法返回null
public static void main(String[] args) {
File dir2 = new File("D:\\Java-file");
File[] files = dir2.listFiles();
System.out.println(Arrays.toString(files));
for (int i = 0; i < files.length; i++) {
String s;
if (files[i].isFile()){
s = "是文件";
}else {
s = "是目录";
}
System.out.println(files[i].getName() + s);
}
}
特定获取功能:
File[] listFiles (FileFilter filter)
//在当前File对象下,返回满足特定条件的文件或目录
public interface FileFilter{
//测试指定抽象路径名是否应该包含在某个路径名列表中
//这个方法用来判断,文件或目录是否满足特定条件
//如果该方法返回true,当前正在判断文件或目录满足条件
//若返回false ,则不满足条件
boolean accept(File pathname);
}
File 类中 FileFilter 表示一种过滤条件
//源码:
public File[] listFiles(FileFilter filter){
//通过表示当前目录的File对象的list方法,获取当前目录下的所有文件或目录的名字
String ss[] = list();
//当File对象表示的是一个文件,返回null
if(ss == null){
return null;
}
//代码执行到这一步代表当前的File对象一定表示的是一个目录
ArrayList<File> files = new ArrayList<>();
for (String s : ss){
//创建代表当前文件或目录的File对象
File f = new File(s,this);
if((filter == null) || filter.accept(f)){
files.add(f);
}
}
return files.toArray(new File[files.size()]);
}
演示:
public static void main(String[] args) {
File dir = new File("D:\\Java-file");
//一个FileFilter对象表示一个判断条件,具体判断条件是由accept方法来体现
FileFilter filter = new FileFilter(){
//匿名内部类
@Override
public boolean accept(File pathname) {
//File 对象表示的是一个文件
return pathname.isFile() && pathname.getName().endsWith(".txt");
}
};
//满足特定条件的File对象
File[] files = dir.listFiles(filter);
System.out.println(Arrays.toString(files));
}
String[] list(FilenameFilter filter)
File[] listFiles(FilenameFilter filter)
//也是一个过滤器,专门针对文件或者目录名字来判断
public interface FilenameFilter{
boolean accept(File dir , String name);
}
演示:
public static void main(String[] args) {
File dir = new File("D:\\Java-file");
File[] Txtname = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//代表当前待判断文件或目录的File对象
File file = new File(dir, name);
return file.isFile() && name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(Txtname));
}