概述
JDK对它的解释是:An abstract representation of file and directory pathnames
。所以File类可以表示文件,也可以表示文件夹。反过来说,文件和文件夹在Java中都会被用File表示。
构造方法
- File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。它并不会实例一个文件或文件对象。
- boolean mkdirs():创建此抽象路径名指定的目录,父目录可以不存在。同时所有父目录上不能存在无后缀但名称相同的文件。如存在文件
a
,不能再创建文件夹a
。 - boolean mkdir():创建此抽象路径名指定的目录,父目录需要存在。 同时父目录上不能存在无后缀但名称相同的文件。如存在文件
a
,不能再创建文件夹a
。 - boolean createNewFile():当且仅当不存在且父目录存在时创建具有此抽象路径名指定名称的文件。
- boolean delete():删除此抽象路径名表示的文件或目录。
- boolean exists():测试此抽象路径名表示的文件或目录是否存在。
- String getName():返回由此抽象路径名表示的文件或目录的名称(Web开发中会用到)。
- boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
- boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。
- String[] list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
- boolean renameTo(File dest):重新命名此抽象路径名表示的文件。比如:
D:\\aaaaa\\aaa.txt
renameToD:\\aaaaa\\bbb.txt
,但是D:\\aaaaa\\aaa.txt
renameToD:\\aaaaa.txt
就不行。
案例
打印某文件夹下所有文件:深度优先和广度优先两种方式。
private static void print(File file) {
if(!file.isDirectory()) {
System.out.println(file);
return;
}
String[] list = file.list();
//这里需要加上判空,因为如果权限不够,会返回null
if(list != null)
for(String e : list) {
if(!file.isHidden())
print(new File(file.getAbsolutePath() + File.separator + e));
}
}
private static void print2(File file) {
String []arr = new String[10100];
int front = 0, end = 0;
arr[end++] = file.getAbsolutePath();
while(front < end){
if(file.isFile()) {
System.out.println(file);
}else {
String []list = file.list();
for(String e : list){
arr[end++] = file.getAbsolutePath() + File.separator + e;
}
}
if(++front != end)
file = new File(arr[front]);
}
}