仿写DOS命令中的查看目录的dir命令和tree命令

听说比尔盖茨开始第一个作的项目就是DOS?哈哈!!今天就用输入输出流来模仿一下!! 大笑

   在开始之前,要先来说下,用pathSeparator和separator来看下你所使用的系统所默认的分隔符;这种也是之后可做跨平台的一种方法。
    
        
   //用这种形式可以跨平台使用,(分割副不同);
        //System.out.println(File.pathSeparator);
        //System.out.println(File.pathSeparatorChar);
        System.out.println(File.separator);
    //    System.out.println(File.separatorChar);

      好了~可以开始啦~

(1)首先,练习一个~假如我们系统每天晚上自动备份,那么每晚自动创建一个以当前日期命名的文件:

  Date d=new Date();
        DateFormat df=new SimpleDateFormat("yyyyMMdd");
        String fileName=df.format(d);
        File f=new File(fileName);
        if(!  f.exists() && f.mkdir() ){
            System.out.println(f.getName()+"创建成功!");
        }else{
            System.out.println(f.getName()+"创建失败!");
        }
       
        


(2)好了~小热身结束,我要开始激动人心的模拟下DOS下的产看目录下文件的dir命令了~\(≧▽≦)/~

1.输出文件,但是并不把其子目录也一并输出的非递归型的!

  //输出文件 (非递归!)
    private static void showDirectoryInfo(File ff) {
        //首先,我们需要先进性一步容错处理:
                 如果,传进来的ff为空,或者ff不是File类型的,那么我们就不应该进行下面的步骤:
        if(ff==null|| ff.isFile() ){
            return ;
        }
<pre name="code" class="java">        //listFiles()返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
 File[] fs=ff.listFiles();
//定义文件的个数
 int fileCount=0;
//定义文件的总长度;
 long fileTotleLenth=0;
//定义目录文件的个数
 int dirctoryCount=0; // 如果目录下有文件存在,就进入输出喽
if( fs!=null|| fs.length>0){
//增强型的for输出
 for(File f:fs){ //判断是文件类型还是目录类型,文件就计算长度,文件就只进行文件数++就好了。
if(f.isFile()){ fileCount++; fileTotleLenth+=f.length(); }else{ dirctoryCount++; } // getFileInfo(f) 方法在后面有定义,就是取的文件的名称,大小,和类型~
System.out.println(getFileInfo(f)); } } //仿DOS最后那个输出
System.out.println("\t\t"+fileCount+"个文件,总大小为:"+fileTotleLenth+"字节"); }

 

2.输出文件,把其子目录也一并输出的递归型的!

  private static void showDirectoryInfoAll(File ff, int level) {
        if(ff==null  ||   ff.exists()==false ){
            return;
        }
        //拼接字符为了格式好看!;
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<level;i++){
            sb.append("    ");
        }
        System.out.println(sb.toString()+ff.getName()  );
       //如果是目录型文件,就进入递归输出,知道是文件型文件结束 
       if( ff.isDirectory() ){
            File[] fs=ff.listFiles();
            if( fs!=null|| fs.length>0){
                for(File f:fs){
                    //注意!!!这里特别重要,绝对不能用level++,这样同一级别的目录也会输出不同的空格。
                   showDirectoryInfoAll(f,level+1);
                }
            }
        }
        
    }

//好了,这就是之前说的,输出文件的信息的方法,被我封装起来啦~~~

  public static String getFileInfo(File f){
        //防DOS系统
        //最后一次被修改的时间
        long time=f.lastModified();
        Date timeDate=new Date();
        DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String FileTimed=df.format(timeDate);
        //求文件类型
        String fileType=f.isFile()?"\t":"<DIR>";
        //求文件长度
        String fileLength=getfileLength(f);
        
        return FileTimed+"\t"+fileType+"\t"+fileLength;
    }
   

还是为了输出的美观~~~又做了个文件长度的处理!

 private static String getfileLength(File f) {
        if(f.isDirectory() ){
            return "\t";
        }
        long length=f.length();
        if(  length/1024/1024/1024/1024/1024>0  ){
            return length/1024/1024/1024/1024/1024+"PB";
            }
        if(  length/1024/1024/1024/1024>0  ){
            return length/1024/1024/1024/1024+"TB";
            }
        if(  length/1024/1024/1024>0  ){
            return length/1024/1024/1024+"GB";
            }
        if(  length/1024/1024>0  ){
            return length/1024/1024+"MB";
            }
        if(  length/1024>0  ){
            return length/1024+"KB";
            }
        return length+"B";
    }

      最后做个测试类~~~哈哈~~大功告成!!!
  System.out.println("请输入一个路径:");
        Scanner  sc=new Scanner(System.in);
        String path=sc.nextLine();
        //选择目录的文件
        File ff=new File(path);
        System.out.println("您是否需要显示所有信息:YES(1)  NO(2)");
        int choose=sc.nextInt();
        if(choose==1){
            showDirectoryInfoAll(ff,0);
        }else if(choose==2){
            showDirectoryInfo(ff);
        }
        else{
            System.out.println("输入错误!程序关闭!");
        }


 
 
  
DOS下的dir命令显示的结果:

 


DOS命令里的tree命令:


俺自己写的仿写dir运行结果:




仿写tree运行结果(看着好像跟window显示的不同呀!!!嘿嘿~~很简单,将代码中sb.appan(“|\t”))和sb.appan(“-----”))就行啦~~~~哈哈~~~有木有很像!!):






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值