File类的常用方法
File类内部封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。
File类的常用的构造方法
File(String pathname)
根据将给定路径名字符串转换为抽象路径名来创建一个新File实例
File(File parent,String child)
根据parent抽象路径名和child路径名字符串创建一个新的File实例
File(String parent,String child)
根据parent路径名字符串和child路径名字符串创建一个新的File实例
File类的常用方法,用于判断文件是否存在、创建、删除文件/目录等
-
文件操作相关的方法
public boolean createNewFile() 创建文件,如果文件存在,就不创建 punlic boolean delete() Java中的删除不走回收站,注意文件夹内不能包含文件或者文件夹
-
目录操作相关的方法
public boolean mkdir() 创建文件夹,如果存在,就不创建 public boolean mkdirs() 创建文件夹,可以递归创建 public String[] list[] 列出File对象的所有子文件名和路径,返回String数组 public File[] listFiles() 列出File对象的所有子文件和路径,返回File数组
-
文件检测相关的方法
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 getNamee() 获取名称 public long lenght() 获取长度,字节数 public long lastModified() 获取最后一次修改时间,毫秒值 需要格式化时间SimpleDateFormat()
-
重命名
public boolean renameTo(File dest) 如果路径名相同,就是改名 如果路径名不同,就是改名剪切 路径以盘符开始:绝对路径 H:\\ 路径不以盘符开始:相对路径 xx.ma4
案例:
public class Example01 {
public static void main(String[] args) {
File file = new File("example.txt");
//获取文件名
System.out.println("文件名是: "+file.getName());
//获取文件的相对路径
System.out.println("文件的绝对路径是:"+file.getAbsolutePath());
//获取文件的绝对路径
System.out.println("文件的相对路径是:"+file.getPath());
//获取文件的父路径
System.out.println("文件的父路径是:"+file.getParent());
//判断文件是否可读
System.out.println("文件是否可读:"+file.canRead());
//判断文件是否可写
System.out.println("文件是否可写:"+file.canWrite());
//判断是否是一个文件
System.out.println("是否是一个文件:"+file.isFile());
//判断是否是一个目录
System.out.println("是否是一个目录:"+file.isDirectory());
//判断是否是一个绝对路径
System.out.println("是否是一个绝对路径:"+file.isAbsolute());
//得到文件最后修改时间
System.out.println("文件的最后修改时间:"+file.lastModified());
//得到文件的大小
System.out.println("文件的大小:"+file.length());
//是否成功删除文件
System.out.println("是否成功删除文件:"+file.delete());
}
}
遍历目录下的文件
list() 方法用于遍历某个指定目录下的所有文件的名称,接下来通过一个案例来演示list()方法的用法
public class Example02 {
public static void main(String[] args) {
File file = new File("C:\\Users\\DELL\\Desktop\\JAVA课件");
if(file.isDirectory()) { //判断File对象对应的目录是否存在
String[] list = file.list(); //获取目录下的所有文件的文件名
for (String name : list) {
System.out.println(name);
}
}
}
}
过滤器的使用
File类中提供了一个重载的list(FilenameFilter filter)方法,该方法接受一个FilenameFilter类型的参数。FilenameFilter 是一个接口,被称作文件过滤器,当中定义了一个抽象方法accept(File dir,String name)。在调用list()方法时,需要实现文件过滤器FilenameFilter ,并在accept()方法中做出判断,从而获得指定类型的文件
public class Example01 {
public static void main(String[] args) {
File file = new File("C:\\Users\\DELL\\Desktop\\JAVA课件");
//创建过滤器方法
FilenameFilter filter = new FilenameFilter() {
//实现accept()方法
@Override
public boolean accept(File dir, String name) {
File currFile = new File(dir, name);
//如果文件名以.md结尾返回true,否则返回false
if(currFile.isFile() && name.endsWith(".md")) {
return true;
}else {
return false;
}
}
};
if(file.exists()) { //判断File对象对应的目录是否存在
String[] lists = file.list(filter); //获得过滤后的所有文件名的数组
for (String name : lists) {
System.out.println(name);
}
}
}
}
遍历所有目录下的文件
listFile() 方法返回一个File对象数组,当对数组中的元素进行遍历时,如果元素中还有子目录需要遍历,则需要使用递归。接下来通过一个案例实现遍历指定目录下的文件
public class Example03 {
public static void main(String[] args) {
File file = new File("C:\\usr");
fileDir(file); //调用fileDir()方法
}
private static void fileDir(File dir) {
File[] files = dir.listFiles(); //获取表示目录下所有文件的数组
for (File file : files) { //遍历所有的子目录和文件
if(file.isDirectory()) {
fileDir(file); //如果是目录就调用fileDir()方法,否则输出
}
System.out.println(file.getAbsolutePath());
}
}
}
删除文件及目录
在操作文件时经常要删除一个目录下的某个文件或者整个目录,这时需要使用File类的delete()方法
删除单个文件
public class Example01 {
public static void main(String[] args) {
File file = new File("D:\\test");
if(file.exists()) {
file.delete();
System.out.println("删除成功");
}
}
}
删除单个目录
public class Example02 {
public static void main(String[] args) {
File file = new File("D:\\test"); //创建一个代表目录的File对象
deleteDiir(file); //调用deleteDir删除方法
}
private static void deleteDiir(File file) {
if(file.exists()) { //判断传入的File文件是否存在
File[] listfile = file.listFiles(); //得到File数组
for (File file2 : listfile) { //遍历所有子目录和文件
if(file.isDirectory()) {
deleteDiir(file2); //如果是目录,递归调用deleteDiir()
}else {
//如果是文件,直接删除
file2.delete();
}
}
}
//删除完最后一个目录里的所有文件后,就删除这个目录
file.delete();
}
}
需要注意的是,在Java中删除是从虚拟机直接删除而不走回收站,文件一旦删除就无法恢复,因此在进行删除操作的时候需要格外小心。