我的Java学习笔记(19)—File类&用File类和递归思想输出目录树

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要加一
            }
       }
 }

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

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值