一、File类的定义:
File类是Java.io包下代表与平台无关的文件和目录。也就是说不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,但是File不能访问文件内容本身。
File类有三种构造方法,对应封装文件或目录的的三种方式。
File(String pathname):根据一个路径得到File对象。
File(String parent, String child): 根据一个目录和一个子文件/目录得到File对象。
File(File parent, String child): 根据一个父File对象和一个子文件/目录得到File对象。
绝对路径和相对路径:
- 绝对路径:
- 在UNIX/Linux/BSD等系统上,如果路径名的开头是一条斜线(/),则表示该文件对象对应一个绝对路径。
- 在Windows等系统上,如果路径的开头名是盘符,则表示这是个绝对路径。(Windows路径分隔符使用的是反斜线(\),Java中反斜线代表转义字符,因此应使用(\\)来分隔路径。也可使用(/)作为路径分隔符。)
- 相对路径:
- 默认情况下,系统总是根据用户的工作路径来解释相对路径。“相对”指相对于当前的工作或工程。比如: 在Idea中创建文件时,相对路径指的是相对于该工程根目录而言。
- 默认情况下,系统总是根据用户的工作路径来解释相对路径。“相对”指相对于当前的工作或工程。比如: 在Idea中创建文件时,相对路径指的是相对于该工程根目录而言。
二、File类常用方法:
方法 | 功能 |
---|---|
public boolean createNewFile() | 创建一个新的文件。如果创建成功,返回true。如果已经存在这样的文件,不重新创建,返回false。 |
public boolean mkdir() | 创建文件夹。如果存在这样的文件夹,就不创建了 注意这个方法只能创建单层目录 如果创建多层目录,得一层一层创建。 |
public boolean mkdirs | 创建文件夹。如果父文件夹不存在,会帮你创建出来 可以创建多层目录 当然也可以创建单层目录。 |
public boolean delete() | 删除文件或者文件夹。删除文件夹时 这个文件夹是空文件夹 如果这个文件夹里面有文件,则不能删除。 |
public boolean renameTo(File dest) | 把文件重命名为指定的文件路径。如果路径名相同,就是改名。如果路径名不同,就是改名并剪切。 |
public boolean isDirectory() | 判断是否是目录,而不是文件。 |
public boolean isFile() | 判断是否是文件,而不是目录。 |
public boolean exists() | 判断文件或目录是否存在。 |
public boolean canRead() | 判断是否可读。 |
public boolean canWrite() | 判断是否可写。 |
public boolean isHidden() | 判断是否隐藏。 |
public String getAbsolutePath() | 获取绝对路径。 |
public String getPath() | 获取相对路径。 |
public String getParent() | 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 |
public File getParentFile() | 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 |
public long getTotalSpace() | 返回此抽象路径名指定的分区大小,返回总容量 单位字节。 |
public long getFreeSpace() | 返回此抽象路径名指定的分区中未分配的字节数,返回剩余容量 单位字节。 |
public String getName() | 获取名称。如果是路径,返回最后一级子路径名。 |
public long length() | 获取文件内容长度,字节数。 |
public long lastModified() | 获取最后一次的修改时间,返回毫秒值。 |
public String[] list() | 获取指定目录下的所有文件或者文件夹的名称数组。 |
public File[] listFiles() | 获取指定目录下的所有文件或者文件夹的File数组 。 |
三、文件过滤器:查找特定格式的文件。
File类的list()文件中可以接收一个FilenameFilter参数,通过参数可以只列出符合条件的文件或目录。
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
FilenameFilter接口里包含了accept(File dir,String name)方法。该方法依次对指定的File所有子目录或者文件迭代,如果方法返回ture,那么list()方法会列出只符合条件的子目录或文件。
FilenameFilter 文件名过滤器 dir 当前文件对应的父文件 name 当前文件的名称
//方法一:public String[] list 接收
File file = new File("E:\\素材\\图片库");
String[] list = file.list((dir, name) -> name.endsWith(".jpg"));
for(String str: list){
System.out.println(str);
}
//方法二:public File[] listFiles 接收
File file = new File("E:\\文档Demo");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file1 = new File(dir,name); //封装指定文件为对象
// System.out.println(file1); 打印文件的绝对路径
boolean flag = file.isFile()&&file.getName().endsWith(".txt"); //后缀名为.txt
return new File(dir,name).isFile() && name.endsWith(".txt");
}
});
for (File file1:files){
System.out.println(file1.getName());
}
//方法二升级版(直接在方法中给返回值):
File file = new File("E:\\素材\\图片库");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isFile()&&name.endsWith(".jpg");
}
});
for(File file1:files){
System.out.println(file1.getName());
}