(十七)文件类

File class(文件类)

1、定义

File class 是一个代表文件或者目录(文件夹)的类。
目录本质上是一个路径,用来标识文件。不占内存。

2、字段摘要

在windows中分隔路径用的是“;”,在Linux中用的是“:”。
pathSeparator
与系统有关的路径分隔符,为了方便,它被表示为一个字符串。字符串类型,好用。
pathSeparatorChar
与系统有关的路径分隔符。字符类型,为了节省空间。
separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。字符串类型。
separatorChar
与系统有关的默认名称分隔符。字符类型。

3、构造方法

File(File parent,String child);
根据parent的路径child的文件,创建一个File对象。
File(String child);
创建一个file对象指向child。
仅仅将此路径标记为一个file对象,而不去检查这个文件是否真实存在。

4、重要方法

1.创建

createNewFile();
创建文件。只有当文件不存在的时候才会创建。此方法需要有一个boolean标记,创建成功返回一个true,创建失败返回一个file。在创建文件的时候,要求存放文件的路径要真实存在,如果不存在则报错,不会创建父目录。只能用于创建文件,不能用于创建目录。

boolean b = file.createNewFile();

mkdir();
创建目录。只能创建目录,不能创建文件。只能创建一层目录,不能一次性创建多层。
mkdirs();
创建多层目录。

2.删除

delete();
表示彻底删除文件或者目录。如果目录有子文件或子目录,则删除失败。

3.获取

getAbsoluteFile();
获取File对象的绝对路径。
getAbsolutePath();
获取传入的File对象的路径。
listFiles();
获取所有的子目录和子文件组成的File数组。
File[] fl = file.listFiles();
listFiles(new Filefileter);
获取所有子目录。参数不可变。
listFiles(new FilenameFilter);
获取所有文件目录的名字。参数不可变。
lastModified();
获取文件最后一次修改时间。返回值表示是修改时间到1970-01-01 00:00:00的毫秒值。
getName();
获取文件的名字。
getParent();
获取父目录。

4.判断

canExecute();
判断是否是可执行文件。
canRead();
判断是否可读文件。
canWrite();
判断文件是否可写。
exists();
判断路径是否真实存在。
isAbsoute();
判断是否是绝对路径。
路径
绝对路径:以盘符或者/开头的路径。和当前路径没有任何关系。
相对路径:不以盘符或者/开头的路径。以当前路径为基准进行计算。..表示的是上一层目录。
isDirectory();
判断是否是一个目录。
isFile();
判断是否是一个文件。
isHidden();
判断是否是隐藏文件。

5.设置

setLastModified(long l);
设置文件最后一次修改时间。参数也是long类型的毫秒值。
setExecutable(boolean b);
设置此文件是否可执行文件。
setReadable(boolean readable);
设置文件是否为可读文件。
setReadable(boolean readable,boolean ownerOnly);
设置用户对文件的可读权限。
setReadOnly();
设置文件是否为只读文件。
setWritable(boolean writable);
设置文件是否为可写文件。
setWritable(boolean writable,boolean ownerOnly);
设置用户对文件的可写权限。
renameTo(new File());
重命名。如果路径没有发生改变,则表示重命名此文件;如果路径发生来改变,则表示的是剪切此文件。

练习

删除目录
需要删除这个目录下的所有子目录和子文件。

    public static void main(String[] args) {
        File file = new File("E:\\aaa");
        delFile(file);
    }
    private static void delFile(File file) {
        // 判断file是否为null
        if (file == null) {
            throw new NullPointerException("亲,文件不能为空啊~~~");
        }
        // 判断是一个目录还是一个文件
        if (file.isDirectory()) {
            // 如果是目录,获取当前目录下的所有的子文件和子目录
            File[] fs = file.listFiles();
            // 遍历数组
            for (File f : fs) {
                // 获取到该file对象之后,需要再次判断这个f是一个子文件还是一个子目录
                delFile(f);
            }
        }
        // 无论是子目录还是子文件,都需要删除
        file.delete();

    }

统计目录
统计java文件和class文件的个数。

public class FileExer2 {
    // 记录Java文件的个数
    static int javaCount = 0;
    // 记录class文件的个数
    static int classCount = 0;
    public static void main(String[] args) {
        File file = new File("E:\\workspace");
        statistic(file);
        System.out.println("Java文件:" + javaCount);
        System.out.println("class文件:" + classCount);
    }
    private static void statistic(File file) {
        // 判断file是否为空
        if (file == null) {
            throw new NullPointerException();
        }
        // 判断是否是一个目录
        if (file.isDirectory()) {
            // 获取这个目录下的所有的子文件和子目录
            File[] fs = file.listFiles();
            for (File f : fs) {
                statistic(f);
            }
        } /* 在计算机中一个file如果不是目录,那么就是文件 */ else if (file.getName().endsWith(".java")) {
            // 如果是文件,判断是否是一个Java文件
            javaCount++;
        } else if (file.getName().endsWith(".class")) {
            classCount++;
        }
    }
}

提取文件
将某一个盘符下的所有docx文件提取到另外一个盘符下的docx目录下。

import java.io.File;
import java.io.FilenameFilter;
public class FileExer {
    static File docx = new File("E:\\DOCX");
    public static void main(String[] args) {
        File file = new File("F:\\aaa");
        get(file);
    }
    private static void get(File file) {
        // 判断file是否为空
        if (file == null) {
            throw new NullPointerException();
        }
        // 判断file是否是一个目录
        if (file.isDirectory()) {
            // 获取这个目录下的所有的子目录和子文件
            File[] fs = file.listFiles();
            for (File f : fs) {
                get(f);
            }
        } else if (file.getName().endsWith(".docx")) {
            // 获取要提取的文件的名字
            // 12.4test.docx
            String name = file.getName();
            // 后去 . 最后一次出现的位置
            int index = name.lastIndexOf(".");
            // 获取的是文件真正的名字
            final String fileName = name.substring(0, index);
            File[] fs = docx.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.matches(fileName + "-\\d+\\.docx") || name.matches(fileName + "\\.docx");
                }
            });
            // 提取文件
            file.renameTo(new File(docx, fileName + (fs.length == 0 ? "" : "-" + fs.length) + ".docx"));
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值