java详解 --- 过滤器和System类

一.过滤器

1.定义:通过一些条件筛选出符合条件的目标
2.三种File相关的过滤器:
list(FilenameFilter);
listFile(FilenameFilter);
listFile(FileFilter filter);
获取的是过滤后满足条件的File(String) 数组.
其中FileFilter的参数只有一个File pathname,表示目标文件夹下的所有一级文件(夹)
3.代码举例:
以FilenameFilter为例:
先创建一个File文件夹 里面随便放些文件和文件夹,起名file
先写一个过滤器:

public class MyFilenameFilter implements FilenameFilter {
    private String suffix;
    // 将过滤功能移交给某个外部 使代码的可拓展性更强
    // 通过带参构造器实现传参
    public MyFilenameFilter(String suffix){
        this.suffix = suffix;
    }

    // 参数列表
    // dir:file04对应的File类型对象
    // name:file04文件夹下所有的一级文件(夹)的文件名
    @override
    public boolean accept(File dir , String name){
        if(name.endWith(suffix)){
            return true;
        }   
        return false;
    }
}

需求代码:

public static void main(String[] args){
    // 1.获取目标文件
    File target = new File("file");

    // 2.获取目标文件所有满足条件的文件夹
    // ① 生成对象(过滤器对象)
    MyFilenameFilter filter = new MyFilenamefilter(.java);
    // ② 获取满足条件的目标(过滤后的目标)
    File[] files = target.listFiles(filter);

    // 3.遍历打印
    for(File f : files){
        System.out.println(f.getName());
    }
}

其中2的部分因为只要使用一次,所以可以换成匿名接口实现类,同样可以实现需求:

File[] files = target.listFiles(new Filenamefilter(){
    @override
    public boolean accept(File dir , String name){
        if(name.endWith(".java")){
            return true;
        }
        return false;
    }
});

二.System类

System类是一些与系统相关的属性和方法的集合,而且在System类中所有的属性都是静态的,要想引用这些属性和方法,直接使用System类调用即可。
1.currentTimeMillis – 获取当前时间(和时间纪元(1970.01.01)相比)
模拟时间sleep(无异常):

String path = "(写一个文件夹的路径)";
File file = new File(path);
file.mkdirs();
// 获取当前时间
long time = System.currentTimeMillis();
// 获取过得时间 和 刚才获得的时间相减获得时间差
// 相当于sleep2秒
while(System.currentTimeMillis - time < 2000){}
// 在程序运行结束时删除创建的文件夹
file.deleteOnExit();

2.Properties – 确定系统当前的属性(获取的其实是一个map集合)

Properties prop = System.getProperties();
// 获取的prop其实就是一个map集合 遍历一下就可以得到系统的当前属性
// 第一种方法 -- 使用迭代器
Set<object> keys = prop.KeySet();
for(Iterator<Object> it = keys.iterator();it.hasNext();){
    String key = (String)it.next();
    System.out.print(" >>> " + key + ": ");
    System.out.println(prop.getproperty(key));
}

// 第二种方法 -- 映射entrySet()方法
Set<Entry<Object , Object>> entry = prop.entrySet();
for(Entry<Object , Object> e : entry){
    System.out.print(" >>> " + e.getKey() + ": ");
    System.out.println(e.getValue());
}

这两种方法都是可以打印出系统的属性的.

相关的可以key值:
路径分隔符( : ) : path.separator
文件分隔符( / ) : file.separator
行分隔符( \n) : line.separator
项目工作目录(绝对路径) : user.dir
用户根目录 : user.home
系统名 : os.name

代码举例:
在桌面生成一个test文件夹

String desktop = System.getProperty("user.home") + System.getProperty("file.separator") + "Desktop";
String p = desktop + System.getProperty("file.separator") + "test";
File f = new File(p);
System.out.println("文件创建情况: " + f.exist);

如果多次使用上述所说的key值得时候就可以封装一个函数以供多次使用,就会很方便了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值