java实现打印某个目录的全部子文件名称

Java文件操作实用示例
import java.io.*;   //实现打印某个目录的全部子文件名称(包括子目录)
import java.util.Scanner;

public class Test { //命令行参数需要提供一个目录参数
    public static void main(String[] args) throws Exception { 
        if (args.length!=1) {
            System.out.println("Usage: java FileExample directory");
            System.exit(0);
        }
        new Test().printFile(new File(args[0]));
        
        Scanner in = new Scanner(System.in);
        String dir = "", filename = "";
        System.out.println("输入目录名:");
        dir = in.next();
        System.out.println("输入文件名:");
        filename = in.next();
        
        Test t = new Test();
        File f = new File(dir);
        int i = 0;
        if( (i = t.find(f, filename)) == 0 ){
            System.out.println("该目录下没有此文件。");
        }else{
            System.out.println("共找到" + i + "个文件。");
        }
        System.out.println(dir + " 目录下,文件总大小:" + t.totalSize(dir));
    }
    public void printFile(File f) throws Exception {
        if (!f.isDirectory()) {
            System.out.println("FileExample only accept directory parameter.");
            System.exit(0);
        }
  
        System.out.println(f.getCanonicalPath());  //输出规范的相对对路径
        File[] children = f.listFiles();    //得到目录的子文件(包括子目录)
        for(int i=0;i<children.length;i++) {
         if (children[i].isDirectory()) {   //如果是子目录,则递归
                this.printFile(children[i]); 
            }
         else {
          System.out.println(children[i].getCanonicalPath());
         }
        }
    }
 //搜索遍历某个目录,判断是否包含某文件
    /**
     * 
     * @param f 
     * @param filename
     * @return
     * @throws Exception
     */
    public int find(File f, String filename) throws Exception{
        int sum = 0;
  if( !f.isDirectory() ){     //给的不是目录文件
                        if(f.getName() == null ? filename==null : f.getName().equals(filename)){//如果同名
                            System.out.println( f.getCanonicalPath() );
                            sum++;
                            return sum;
                        }
   System.out.println( f.getName() + " is not a Directory." );
   return sum;
  }
  File[] children = f.listFiles();  //得到目录下所有文件
  for(int i=0; i<children.length; i++){ //遍历子目录
   if( !children[i].isDirectory() ){ //如果不是目录文件
    if(children[i].getName() == null ? filename == null : children[i].getName().equals(filename)){
                                    System.out.println(children[i].getCanonicalPath());//同名输出目录的相对路径
                                    sum++;
                                }
   }
   else{   //如果是目录,递归
                            sum += this.find(children[i], filename);
   }
  }
                return sum;
 }
 
 //返回该目录的所有的文件大小之和
 public long totalSize(String dir) {
            long size = 0;
            File f = new File(dir);
            if( !f.isDirectory() ){//如果不是一个目录
                size += f.getUsableSpace();
            }
            else{//如果是一个目录
                File[] children = f.listFiles(); //得到目录下所有文件
                for(int i=0; i<children.length; i++){
                    if( !children[i].isDirectory() ){//如果不是一个目录文件
                        size += children[i].getUsableSpace();
                    }
                    else{//如果是一个目录,递归
                        totalSize( children[i].getName() );
                    }
                }
            }
 return size;
 }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值