(十七)文件类

来源:互联网 发布:浙大网络线怎么用 mac 编辑:程序博客网 时间:2024/06/05 06:31

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"));        }    }}
原创粉丝点击