java.io.File类:
一、创建文件或目录
//创建文件本来就有的File类对象
File file=new File("E:\\JavaWorkspace\\mypractice9-20\\testFile.txt");
System.out.println(file);
//创建新的没有的File类对象
File file2=new File("E:\\JavaWorkspace\\mypractice9-20\\testFile2.txt");
file2.createNewFile();
System.out.println(file2);
第一个就会创建对象,对象的路径就是自己本来写好的文件,第二个执行了createFile方法之后,就会在指定的创建路径里创建出指定的这个文件,试试刷新就能看到了。
boolean mkdir() | 创建由此抽象路径名命名的目录(如果目录中间有缺失那就创建失败了) |
boolean mkdirs() | 创建由此抽象路径名命名的目录(如果目录有缺失啥的就创建目录) |
boolean delete() | 删除由此抽象路径名表示的文件或目录。(文件就删除文件,目录就只能删除最里层的目录) |
createNewFile() | 当且仅当具有该名称的文件尚不存在时,会创建一个由该抽象路径名命名的新的空文件。 |
二、File类的一些其他常用方法
boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
System.out.println("Is file exist? "+file.exists());
boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
System.out.println("Is file a path? "+ file.isDirectory());
boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
System.out.println("Is file a file? "+ file.isFile());
long lastModified() 返回此抽象路径名表示的文件上次修改的时间。(注意,这里返回值是一个long类型的时间值,要想看到日期,要用Date类来转化,否则输出的是从1970年开始的毫秒数)
System.out.println("Latest modified time of the file: "+new Date(file.lastModified()));
long length() 返回由此抽象路径名表示的文件的长度。
System.out.println("Size of the file: "+file.length());
String getPath() 将此抽象路径名转换为路径名字符串。
System.out.println("Name of the file: "+file.getName());
String getName() 返回由此抽象路径名表示的文件或目录的名称
System.out.println("Path of the file: "+file.getPath());
三、结合递归算法以树状结构展示目录树
首先我们写一个输出目录树的方法:
public static void printFile(File file) {
System.out.println(file.getName());//首先要输出路径的名字
//如果是目录就输出目录里的文件列表,如果不是目录就已经到底层了
if (file.isDirectory()) {
File[] files=file.listFiles();//把目录里的各个文件名数组存储
for(File temp:files) {
printFile(temp);//递归调用这个方法,然后往下查看是不是某个路径下面还有文件路径
}
}
}
这中间首先加了判断是不是为路径,毕竟目录到底就不能再输出了,其次遍历的同时要一直往下追溯,所以最好的方法就是使用递归自己调用自己。
测试一下本地的D盘下面的一个软件的目录:
可以看到已经输出了,但是美观程度不够,我们想要的是像树一样有展示层次结构的,因此很简单,加上输出的一点格式控制。
基本想法是如果要体现层次,对于不同次数的递归也就是越往深,输出的那一行应该往里挪的多一点,我们在输出的方法参数里加上一个控制变量level,然后每一次递归让他自增,这个值来控制输出的缩进。
public static void printFile(File file,int level) {
System.out.println(">"+file.getName());
for(int i=0;i<level;++i) {
System.out.print("----");
}
if (file.isDirectory()) {
File[] files=file.listFiles();
for(File temp:files) {
printFile(temp,level+1);//再调用的时候就是第下一层,level要加一
}
}
}
这次的输出结果就会更加分明: