File类介绍
File类是位于java.io包下的一个操作文件的工具类。
File类的一个对象,代表一个文件或一个文件目录。
File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。
一:File类构造方法
File(String filePath)
String类型参数filePath,表示文件路径名称。根据路径名称创建一个新的File实例。
File(String parentPath,String childPath)
根据父路径名称和子路径名称创建一个新的File类实例
File(File parentFile,String childPath)
根据父路径的File实例和子路径名称创建一个新的File类实例。
注:如果只使用上面的三个构造方法创建File类的实例,路径表示的那个文件可以存在也可以不存在。只是表示表示一个file对象存在了而已。
路径的分类:
相对路径:相较于某个路径下,指明的路径。
绝对路径:包含盘符在内的文件或文件目录的路径。
最简单区分,绝对路径带盘符A: B:等开头,相对路径不带。
注:根据开发软件的不同
IDEA:①用main()测试,相对路径在当前的Project下。
②用JUnit中的单元测试方法测试,相对路径在当前Module下。
Eclipse中:
不管使用单元测试方法还是使用main()测试,相对路径都是当前的Project下。
注:路径分隔符
windows和DOS系统默认使用“\”来表示
UNIX和URL使用“/”来表示
二:File类的常用方法
2.1创建功能方法
public boolean createNewFile();
文件不存在,创建文件并返回true。若文件存在,则不创建,返回false
public boolean mkdir();
创建文件目录,如果此目录存在,不创建并返回false,如果此目录上层文件不存在也不创建返回false。
注:这里肯定有人会好奇文件路径分隔符为什么用\\,这与上面描述不符呀。
这是因为单斜杠“\”在编程语言中属于转义字符,例如“\n”表示换行。假如文件名
第一个字母为n,以E:\IO\IO\notive.txt为例,中间的\n表示换行,造成错误。
为了此类错误的出现,所以IDEA自动会将文件路径分隔符编程双斜杠\\。
public boolean mkdirs();
创建文件目录,如果此目录不存在或者上级目录不存在,都一并创建,返回true。
2.2:判断功能方法
public boolean isDirectory();
判断是否是目录
public boolean isFile();
判断是否是文件
public boolean exists();
判断是否存在
public boolean canRead();
判断是否刻度
public boolean canWrite();
判断是否可写
上面的方法只是字面意思,就不做过多叙述
2.3:获取文件信息方法
public File getAbsoluteFile();
返回绝对路径
public String getPath();
返回路径
public String getName();
返回文件或目录名称,该名称是路径名名称序列中的最后一个名称。
public String getParent();
返回父目录的路径名称。
注:由下图可看出,如果创路径名没有指明父路径,就会返回null
public long length();
返回文件的长度,以字节为单位;如果文件不存在,则返回 0L。
注不能获取目录的长度。
2.4:重命名
public boolean renameTo(File dest);
以file1.renameTo(file2)为例; 要想成功保证返回true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在。
2.5删除操作
public boolean delete();
删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。
常见题目
1.1打印出一个目录下的所有文件
public class TestDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO");
printSubFile(file);
}
private static void printSubFile(File file) {
//打印目录的子文件
File[] files = file.listFiles();
for (File f : files){
if(f.isDirectory()){//f是文件目录
printSubFile(f);
}else {
System.out.println(f.getAbsolutePath());
}
}
}
}
1.2:删除某个目录下的所有文件
public class TestDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO");
deleteDirectory(file);
}
public static void deleteDirectory(File file){
//如果file是文件直接delete
//如果file是目录,先把它的下一级干掉,然后删除自己
if(file.isDirectory()){
File[] all =file.listFiles();
//循环删除的是file的下一级
for (File f : all){
deleteDirectory(f);
}
}
//删除自己
file.delete();
}
}
1.3:过滤打印某目录下所有以.txt结尾的文件
public class TestDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO");
String[] str = file.list();
for (String fileName : str){
if(fileName.endsWith(".txt")){
System.out.println(fileName);
}
}
}
}