概述:java.io.File类是文件或目录路径名的抽象表示,主要用于文件和目录的创建,查找和删除等操作.
特点:
1.一个File类对象代表了一个文件路径名或目录路径名.
2.无论该路径下是否存在文件或目录,都不影响File类对象的创建.
绝对路径和相对路径:
绝对路径:从盘符开始的路径,这是一个完整的路径。
相对路径:相对路径是相对于项目目录的路径.因为系统是根据运行java虚拟机时所在的路径算相对路径.一般从项目启动,相对路径就是相对于项目目录的路径.
构造方法:
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
常用的方法:
创建文件和目录:
boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
boolean mkdir() 创建由此抽象路径名命名的目录。
boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
删除文件和目录:
boolean delete() 删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。
获取文件和目录的信息:
public long length() 返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
String getPath() 将此抽象路径名转换为路径名字符串。
String getName() 返回由此抽象路径名表示的文件或目录的名称。
String getParent()返回此抽象路径名的父路径名字符串,如果此路径名没有指定父目录,则返回null。
File getParentFile()返回此抽象路径名的父抽象路径名,如果此路径名没有指定父目录,则返回null。
判断功能:
- public boolean exists() :此File表示的文件或目录是否实际存在。
- public boolean isDirectory() :此File表示的是否为目录。
- public boolean isFile() :此File表示的是否为文件。
遍历功能:
- public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
- public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
- public File[] listFiles(FileFilter filter) :返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回null 。
Demo:
File file = new File("demo\\a.txt"); System.out.println(file.getAbsoluteFile());//d:\ideawork\JavaSE2\a.txt System.out.println(file.getPath());//demo\a.txt,传入的路径 System.out.println(file.getName());//a.txt System.out.println(file.length());//0,文件不存在
Demo:
File file1 = new File("src\\enday08\\Demo.java"); System.out.println(file1.getAbsoluteFile());//不管传入的是相对路径还是绝对路径,都能获取到File的绝对路径 System.out.println(file1.length());//44 System.out.println(file1.getPath());//打印构造路径 src\enday08\Demo.java File file2 = new File("d:\\ideawork\\JavaSE2\\src\\enday08\\Demo.java"); System.out.println(file2.getPath());//d:\ideawork\JavaSE2\src\enday08\Demo.java
Demo:
File file1 = new File("src\\enday08\\aaa"); System.out.println(file1.exists()); System.out.println(file1.isDirectory()); System.out.println(file1.isFile());
File file1 = new File("src\\enday08\\c.txt"); file1.createNewFile(); File file2 = new File("src\\enday08\\aaa"); System.out.println(file2.createNewFile());//false,已存在文件夹 File file3 = new File("src\\enday08\\aaa"); System.out.println(file3.mkdir());//false,已存在文件夹,创建失败,返回false File file4 = new File("src\\enday08\\bbb"); System.out.println(file4.mkdir());//true,文件夹不存在,创建成功 File file5 = new File("src\\enday08\\ccc\\ddd"); System.out.println(file5.mkdir());//false,创建单级目录,不能创建多级目录 System.out.println(file5.mkdirs());//true,创建单级目录或多级目录
Demo:
File file1 = new File("src\\enday08\\c.txt"); System.out.println(file1.delete());//true,删除文件成功 File file2 = new File("src\\enday08\\aaa"); System.out.println(file2.delete());//true,删除空目录成功 //不能删除有子文件和子目录的文件夹
Demo:
File file1 = new File("src\\enday08"); System.out.println(Arrays.toString(file1.list()));//获取当前目录的子文件和子目录 //获取子文件或子文件夹的构造路径的File对象:src\enday08\+文件名/目录名 File[] files = file1.listFiles(); for(File file:files){ System.out.println(file.getPath()); } File file = new File("src\\aa");//文件不存在 String[] strs =file.list(); File[] files1 = file.listFiles(); System.out.println(strs);//null System.out.println(files1);//null //没有访问权限 File file2 = new File("C:\\Recovery"); System.out.println(file2.length()); System.out.println(file2.list());//null System.out.println(file2.listFiles());//null //文件 File file3 = new File("src\\enday08\\Demo.java"); System.out.println(file3.length()); System.out.println(file3.listFiles());//null System.out.println(file3.list());//null
Demo:
/** * 打印一个目录下的所有文件 * @param file */ public static void printDirectory(File file){ //出口 if(file.isFile()){ System.out.println(file.getAbsoluteFile()); return; } System.out.println(file.getAbsoluteFile()); File[] files = file.listFiles(); for(File f:files){ if(f.isDirectory()){ printDirectory(f.getAbsoluteFile()); }else { System.out.println(f.getAbsoluteFile()); } } }