Java笔记-File类基本操作

使用File类操作文件或目录属性


java.io 包为我们提供了一些接口和类,对文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作等。

File类构造方法


如何使用File 类操作文件或目录:
一个File 对象可以代表一个文件或目录。利用它可以对文件或目录进行基本操作。

//创建一个 File 对象的语法如下:
//pathName表示所指向的文件路径名。
//下面这句代码表示:在内存中构建一个对象,关联了一个路径而已,没有真正
//操作本地系统去创建
File file = new File(String pathName);

//例如:创建一个指向C盘根目录下的test.txt文件的对象
File file = new File("C:\\test.txt");
File file = new File("C:/test.txt");

注意:在 Windows 操作系统中,文件路径名中的分隔符可以使用正斜杠/;也可以用两个反斜杠\\

File 类常用方法如下:


1.创建功能:

方法名称 说明
boolean createNewFile() 创建指定名称的空文件,不创建文件夹,如果路径不存在则报错
boolean mkdir() 创建路径,只能创建一层,多层则返回 false 创建失败
boolean mkdirs() 创建多层路径,只能创建文件夹

2.删除功能

方法名称 说明
boolean delete() 删除此对象指定的文件或文件夹,文件夹不为空则删除失败,返回false

3.重命名功能:

方法名称 说明
boolean renameTo(File dest) 重命名功能。如果目标路径和原路径一致,则改名。如果目标路径和原路径不一致,则剪切并改名

4.判断功能:

方法名称 说明
boolean exists() 判断文件或文件夹是否存在
boolean isFile() 判断是否是文件
boolean isDirectory() 判断是否是文件夹
boolean canRead() 判断是否可读
boolean canWrite() 判断是否可写
boolean isHidden() 判断是否隐藏
boolean canExecute() 判断是否可执行

5.基本获取功能:

方法名称 说明
String getPath() 返回此对象表示的文件的相对路径名:当前工程下的路径
String getAbsolutePath() 返回此对象表示的绝对路径名:带盘符的路径
String getName() 返回此对象表示的文件或文件夹的名称
long length() 返回文件的长度,单位为字节,若文件不存在,则返回0L
long lastModified() 获取最后修改时间
File getParentFile() 获取父路径的 file 对象

6.高级获取功能:

方法名称 说明
String[] list() 获取当前路径下所有的文件的名字,返回 String 数组。此处无法分清获取到的名字到底是一个文件还是一个文件夹
File[] listFiles() 获取当前文件下所有的文件封装成一个 File 对象。这样操作的好处是可以调用 File 类的功能进行文件的操作

例如:

package file_io;

import java.io.File;
import java.io.IOException;

public class FileMethods {
    public static void main(String[] args) {
        FileMethods fm = new FileMethods();
        File file = new File("F:\\demo\\hello.txt");
        fm.creat(file);
        fm.showFileInfo(file);
        // fm.delete(file);
    }

    /**
     * 显示文件信息
     * @param file
     *            文件对象
     */
    public void showFileInfo(File file) {
        if (file.exists()) { // 判断文件或目录是否存在
            if (file.isFile()) {// 如果是文件
                System.out.println("文件名:" + file.getName());
                System.out.println("相对路径:" + file.getPath());
                System.out.println("绝对路径:" 
                    + file.getAbsolutePath());
                System.out.println("文件大小:" 
                    + file.length() + "字节");
            }
            if (file.isDirectory()) {
                System.out.println("此文件是目录");
            }
        } else {
            System.out.println("文件不存在");
        }
    }

    /**
     * 创建文件的方法
     * @param file
     *            文件对象
     */
    public void creat(File file) {
        if (!file.exists()) {
            try {
                file.createNewFile();
                System.out.println("文件创建成功!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("文件已经存在!");
        }
    }

    /**
     * 删除文件
     * @param file
     *            文件对象
     */
    public void delete(File file) {
        if (file.exists()) {
            file.delete();
            System.out.println("文件删除成功!");
        }
    }
}

文件名称过滤器的实现思想及代码


//返回符合文件名称要求的文件名称 String数组
public String[] list(FilenameFilter filter)

//返回符合文件名称要求的文件 File数组
public File[] listFiles(FilenameFilter filter)

具体实现如下:

1.自己写个MyFilter类 实现 FilenameFilter接口

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

public class MyFilter implements FilenameFilter {

    @Override
    public boolean accept(File dir, String name) {
        //dir->文件的父路径
        //name->文件名
        //文件名筛选:如果以.jpg结尾则符合要求返回true
        //else 返回false 不满足要求
        if (name.endsWith(".jpg")) {
            return true;
        }
        return false;
    }

}

2.实现筛选:

public static void main(String[] args) {
        // file对象 指向目录D:\\
        File file = new File("D:\\");
        // 调用 file.list(FilenameFilter filter) 方法
        // FilenameFilter 是Java自带的接口
        //需要匿名对象来调用 即new MyFilter()
        //返回 满足要求的文件名字数组
        String[] nameList = file.list(new MyFilter());
        for (String name : nameList) {
            System.out.println(name);
        }
        //同上 方法返回所有符合要求的文件 数组
        File[] fs = file.listFiles(new MyFilter());
        for (File f : fs) {
            System.out.println(f.getName());
        }
}

使用File删除文件夹


目的:使用 File 删除文件夹内所有内容+该文件夹

代码如下:

import java.io.File;

public class DeleteFile {
    public static void main(String[] args) {
        //路径千万别写成盘符根目录,不然就啥都没了,233
        File file = new File("D:\\a");
        del(file);
    }

    public static void del(File path) {
        File[] fs = path.listFiles();
        for (File f : fs) {
            if (f.isFile()) {
                System.out.println("文件->" + f.getName() + 
                    " 已被删除:" + f.delete());
            } else {
                System.out.println("进入了文件夹--->" 
                    + f.getName());
                del(f);
            }
        }
        System.out.println(path.getName() + 
            "->文件夹已被清空,执行删除文件夹操作!" + path.delete());
    }
}

你可能感兴趣的:(JavaSE)