java.io.File

File(文件)既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。File类的实例是不可变的;也就是说,File对象表示的抽象路径名将不可改变。

利用目录过滤器获得一个受限文件列表,

import java.io.File;
import java.io.FilenameFilter;

//实现FilenameFilter接口
public class Filenamefilter implements FilenameFilter{
    String regex=null;
    public Filenamefilter(String regex){
        this.regex=regex;
    }
    //接口中的方法,用于选取满足要求的文件
    //其中,file指的是 目标文件路径path ,name指的是文件名
    public boolean accept(File file,String name){
        return name.startsWith(regex);
    }
}


class DirList{
    public static void main(String[] args) {
        //文件目录
        File path=new File("D:\\工作笔记");
        //list方法会为此目录对象下的每个文件名调用accept()方法,判断该文件是否包含在内
        String[] strList=path.list(new Filenamefilter("规则"));

        for(String dirItem:strList){
            System.out.println(dirItem);
        }
    }

}
//结果
规则有误分析1.png
规则有误分析2.png

利用匿名内部类进行改进:

class FileInnerNameFilter{
    public static void main(String[] args) {
        File path=new File("D:\\工作笔记");
        //匿名类要直接使用该变量,因此要定义为final
        final String regex="规则";
        String[] strList=path.list(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.startsWith(regex);
            }
        });
        for(String dirItem:strList){
            System.out.println(dirItem);
        }
    }
}

产生给定目录下的整个目录树中所有的文件:

public class TreeInfo {
    //分别保存文件和目录
    List<File> files=new ArrayList<File>();
    List<File> dirs=new ArrayList<File>();

    public void addAll(TreeInfo other){
        files.addAll(other.files);
        dirs.addAll(other.dirs);
    }

    public static TreeInfo walk(String path,String regex){
        return recurseDirs(new File(path),regex);
    }

    public static TreeInfo walk(File start,String regex){
        return recurseDirs(start,regex);
    }

    //指定处的文件开始
    public static TreeInfo recurseDirs(File startDir,String regex ){
        TreeInfo result=new TreeInfo();
        for(File item:startDir.listFiles()){
            if(item.isDirectory()){
                //添加当前目录
                result.dirs.add(item);
                //利用递归,从当前目录开始
                result.addAll(recurseDirs(item,regex));
            }else{
                result.files.add(item);
            }
        }
        return result;
    }
}

File类的一些常用方法:

public class FileTest {
    public static void main(String[] args) {
        //判断指定的文件是否存在,不存在就创建
        //unix平台,分隔符是/
        //windows平台,分隔符是\
        String url="D:\\GoogleMaps\\Egypt"+ File.separator+"\\test";
        File dir=new File(url);
        if(!dir.exists()){
            //这是创建目录,而不是文件
            //创建此抽象路径指定的目录,包括所有必需但不存在的父目录
          System.out.println("创建目录:"+dir.mkdirs());
        }


        File file=new File(dir+File.separator+"test.txt");
        try {
            //只会适用创建文件本身,不包括父文件的创建(如果父文件不存在,需要判断)
            System.out.println("创建文件:"+file.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("文件是否可读:"+file.canRead());
        System.out.println("文件是否可写:"+file.canWrite());

        System.out.println("绝对路径名:"+file.getAbsolutePath());
        System.out.println("文件名:"+file.getName());
        System.out.println("父目录:"+file.getParent());
        System.out.println("是否是目录:"+file.isDirectory());
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("最近一次被修改的时间:"+file.lastModified());
        System.out.println("文件的长度:"+file.length());
        //原来的文件不见了
        System.out.println("移动文件(相当于重新命名):"+file.renameTo(new File(dir+File.separator+"newTest.txt")));
        System.out.println("路径名字符串:"+file.toString());
        System.out.println("文件删除:"+file.delete());
    }
}
//结果:
创建目录:true
创建文件:true
文件是否可读:true
文件是否可写:true
绝对路径名:D:\GoogleMaps\Egypt\test\test.txt
文件名:test.txt
父目录:D:\GoogleMaps\Egypt\test
是否是目录:false
是否是文件:true
最近一次被修改的时间:1499951806477
文件的长度:0
移动文件(相当于重新命名):true
路径名字符串:D:\GoogleMaps\Egypt\test\test.txt
//因为文件被重命名,所以删除失败
文件删除:false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值