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());

java 递归文件 java递归创建文件_递归

三、结合递归算法以树状结构展示目录树

首先我们写一个输出目录树的方法:

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盘下面的一个软件的目录:

java 递归文件 java递归创建文件_java 递归文件_02

可以看到已经输出了,但是美观程度不够,我们想要的是像树一样有展示层次结构的,因此很简单,加上输出的一点格式控制。

基本想法是如果要体现层次,对于不同次数的递归也就是越往深,输出的那一行应该往里挪的多一点,我们在输出的方法参数里加上一个控制变量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要加一
            }
       }
 }

这次的输出结果就会更加分明:

java 递归文件 java递归创建文件_java 递归文件_03