File类中常用的方法:
创建:
createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false
mkdir() 在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。
mkdirs() 在指定位置创建目录,这会创建路径中所有不存在的目录。
renameTo(File dest) 重命名文件 , 文件夹不同时相当于文件的剪切。移动/重命名成功则返回true,失败则返回false。
删除:
delete() 删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。
deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除
判断:
exists() 文件或文件夹是否存在。
isFile() 是否是一个文件,如果不存在,则始终为false。
isDirectory() 是否是一个目录,如果不存在,则始终为false。
isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
isAbsolute() 测试此抽象路径名是否为绝对路径名。
获取:
getName() 获取文件或文件夹的名称,不包含上级路径。
getPath() 返回绝对路径下父目录,可以是相对路径,但是目录要指定
getAbsolutePath() 获取文件的绝对路径,与文件是否存在没关系
length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified() 获取最后一次被修改的时间。
文件夹相关:
staic File[] listRoots() 列出所有的根目录(Window中就是所有系统的盘符)
list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
list(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
listFiles(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
列出指定目录中所有包含的子文件与子目录的名称
public static void listAllFilesAndDirs(String path) {
// 1,创建File对象,表示这个目录
File dir = new File(path);
// 2,通过list()方法得到所包含的所有子目录与子文件名称。
String[] names = dir.list();
// 3,显示这些名称
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
}
列出指定目录中所有的子孙文件与子孙文件夹(递归)
递归调用,要有层次
public static void listAllFilesAndDirs2(File dir, String prefix) {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
// 显示名称
System.out.println(prefix + file.getName());
// 如果是目录,就递归调用自己
if (file.isDirectory()) {
listAllFilesAndDirs2(file, "\t" + prefix); // 显示下一层
}
}
}
列出指定目录中所有的子孙文件与子孙文件夹(2)
要求名称前面要有相应数量的空格: 第一级前面有0个,第二级前面有1个,第三级前面有2个...,以此类推。
// 调用代码:listAllFilesAndDirs3(dir, 0);
public static void listAllFilesAndDirs3(File dir, int num) {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
// 计算前面应有几个空格
String prefix = "";
for (int j = 0; j < num; j++) {
prefix += "\t";
}
// 显示名称
System.out.println(prefix + file.getName());
// 如果是目录,就递归调用自己
if (file.isDirectory()) {
listAllFilesAndDirs3(file, num+1); // 显示下一层
}
}
}
列出指定目录中所有的子孙文件与子孙目录名,要求要是树状结构,效果如下所示:
|--src
| |--cn
| | |--itheima
| | | |--a_helloworld
| | | | |--HelloWorld.java
| | | |--b_for
| | | | |--ForTest.java
| | | | |--S.java
|--bin
| |--cn
| | |--itheima
| | | |--i_exception
| | | | |--ExceptionTest.class
| | | |--h_linecount
| | | | |--LineCounter2.class
| | | | |--LineCounter.class
|--lib
| |--commons-io.jar
-------------------------------------------------------------------------------------------------
public class FileTest4 {
public static void main(String[] args) {
File dir = new File("c:/test");
listFilesAndDirs(dir, "|--");
}
// 调用的代码:listFilesAndDirs(dir, "|--");
public static void listFilesAndDirs(File dir, String prefix) {
File[] files = dir.listFiles();
for(int i = 0; i < files.length; i++){
File file = files[i];
// 显示名称
System.out.println(prefix + file.getName());
// 显示下一层目录中的内容
if(file.isDirectory()){
listFilesAndDirs(file, "| " + prefix);
}
}
}
}
删除一个非空文件夹
递归调用
public static void delete(File dir){
File[] files = dir.listFiles();
for(File f: files){
//判断是否为文件夹
if(f.isDirectory()){
delete(f);
f.delete();
}
//判断是否为文件
else{
f.delete();
}
}
dir.delete();
}