Java File的三种用途

前言

File类是Java IO系统中的关键类,这个名字有一定的误导性,它可能会被认为是一个文件。

实际上它既能代表一个特定文件的名称,也能代表一个目录,用文件路径来称呼会比较容易理解。

用途1:创建目录和文件

 String dir = "F:/technology/filedir";
        //创建目录
        File testDir = new File(dir+"/testDir");
        if(!testDir.exists()){
           boolean b1 =  testDir.mkdirs();
            System.out.println(b1);
        }
        //创建文件
        File testFile = new File(testDir.getAbsolutePath()+"/testfile.txt");
        try {
            //如果文件已存在,则返回false
            boolean b2 = testFile.createNewFile();
            System.out.println(b2);
        } catch (IOException e) {
            e.printStackTrace();
        }

在这里插入图片描述
在这里插入图片描述

用途2:筛选目录中的文件

如果一个File是目录,那么使用list()方法可以列表该目录下的所有文件和子目录的名称。并且该方法还可以传一个FilenameFilter参数,用以筛选得到的结果。

首先要写一个类实现FilenameFilter接口,重写accept(File dir, String name)方法,并传入一个正则表达式构建一个Pattern对象,如下所示,也可采用匿名内部类的方式实现。

class DirFilter implements FilenameFilter {
    private Pattern pattern;

    public DirFilter(String regex) {
       pattern = Pattern.compile(regex);
    }

    @Override
    public boolean accept(File dir, String name) {
        return pattern.matcher(name).matches();
    }
}

accept()方法必须接受一个代表某个特定文件所有目录的File对象,以及文件名。list()方法会为此目录对象下的每个文件名调用accept()来筛选文件(也适用于子目录),判断结果由accept()返回的布尔值表示。

示例如下,筛选出所有带.class后缀的文件。

        //筛选文件列表
        File path = new File(dir);
        //筛选前
        String[] list = path.list();
            System.out.println("筛选前...");
        for(String dirItem:list){
            System.out.println(dirItem);
        }
        //筛选后
        String[] list2 = path.list(new DirFilter("\\w+\\.class"));
        //将数组按照字母表进行排序
        Arrays.sort(list2,String.CASE_INSENSITIVE_ORDER);
        System.out.println("筛选后...");
        for(String dirItem:list2){
            System.out.println(dirItem);
        }

筛选前…

abcdefclass
Chopstick.java
DeadlockingDiningPhilosophers.java
InnerThread.class
Meal.class
Philosopher.java
Restaurant.class
SelfManaged.class
SimpleDaemons.class
testDir

筛选后…

InnerThread.class
Meal.class
Restaurant.class
SelfManaged.class
SimpleDaemons.class

用途3:文件重命名或移动、属性查看

调用File的renameTo()方法,可将一个文件重命名(或移动)到另一个File对象中,从而完成重命名或路径的更换。

示例如下:

        File newTestFile = new File(testDir.getAbsolutePath()+"/hello_java.txt");
        boolean c = testFile.renameTo(newTestFile);
        System.out.println(c);

插图

查看文件的各种属性

        //查看绝对路径
        System.out.println(newTestFile.getAbsolutePath());
        //查看文件或目录名
        System.out.println(newTestFile.getName());
        //查看上级目录
        System.out.println(newTestFile.getParent());
        //查看文件内容的字节数
        System.out.println(newTestFile.length());
        //是否可读或可写
        System.out.println(newTestFile.canRead()+","+newTestFile.canWrite());
        //最后修改时间,毫秒值
        System.out.println(newTestFile.lastModified());
        
//输出如下,txt内容为hello world!java~学习
F:\technology\filedir\testDir\hello_java.txt
hello_java.txt
F:\technology\filedir\testDir
21
true,true
1552312554155

总结:File类只是一个路径名称,只能创建或修改目录和文件,无法向文件内写入内容。

发布了92 篇原创文章 · 获赞 68 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/pigdreams/article/details/88411466