Java中的文件操作类File的常用方法

150 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

Java中的文件操作类File的常用方法

       在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成。File 类定义了一些方法来操作文件,如新建、删除、重命名文件和目录等。

       File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

看几个案例:

       阅读下列程序,掌握File类文件及文件夹的创建方法。

创建功能:

       public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了

       public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

       public boolean mkdirs():创建文件夹,如果父文件夹不存在,会把父文件夹创建出来

注意:

       到底要创建文件还是文件夹,方法不要调错了。

需求:

       在e盘目录下创建一个文件夹demo

    File file1=new File("e:\\demo");
   System.out.println("mkdir:"+file1.mkdir());

需求:

       在e盘目录demo下创建一个文件a.txt

    File file2=new File("e:\\demo\\a.txt");
    System.out.println("createNewFile:"+file2.createNewFile());

需求:

       在e盘目录test下创建一个文件b.txt

       Exception in thread "main" java.io.IOException: 系统找不到指定的路径。

注意:

       要想在某个目录下创建内容,该目录首先必须存在。

     File file3=new File("e:\\test\\b.txt");
    System.out.println("createNewFile:"+file3.createNewFile());

需求:

       在e盘目录test下创建aaa目录     

    File file4=new File("e:\\test\\aaa");
    System.out.println("mkdir:"+file4.mkdir());

阅读下列程序,掌握File类文件及文件夹的删除方法。

       删除功能:public boolean delete()

注意:

       A:如果创建文件或者文件夹没有写盘符路径,那么,默认在项目路径下。

       B:Java中的删除不走回收站。

       C:要删除一个文件夹,该文件夹内不能包含文件或者子文件夹

       D:没有写盘符路径,则称为相对路径,文件创建在项目路径下

    File file6 = new File("aaa\\bbb");
    File file7 = new File("aaa");
    System.out.println("delete:" + file6.delete());
    System.out.println("delete:" + file7.delete());

File类的判断功能和获取功能

判断功能:

       public boolean isDirectory():判断是否是目录

       public boolean isFile():判断是否是文件

       public boolean exists():判断是否存在

       public boolean canRead():判断是否可读

       public boolean canWrite():判断是否可写

       public boolean isHidden():判断是否隐藏

获取功能:

       public String getAbsolutePath():获取绝对路径

       public String getPath():获取相对路径

       public String getName():获取名称

       public long length():获取长度。字节数

       public long lastModified():获取最后一次的修改时间,毫秒值

掌握File类的高级获取功能。

高级获取功能:

       public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

       public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

编写程序,过滤出E盘目录下(不包含子目录)所有后缀名为.jpg的文件并输出到控制台。

       判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称

       要想实现这个效果,就必须学习一个接口:文件名称过滤器

       public String[] list(FilenameFilter filter)

       public File[] listFiles(FilenameFilter filter)

    File[] strArray = file.listFiles((dir,name)->new File(dir, name).isFile()&&name.endsWith(".jpg"));
    for (String s : strArray) {
        System.out.println(s);
     }

     Arrays.stream(strArray).forEach(f -> System.out.println(f))

编写程序,删除内容非空且有多级子目录的目录

思路分析:

       A:封装目录

       B:获取该目录下的所有文件或者文件夹的File数组

       C:遍历该File数组,得到每一个File对象

       D:判断该File对象是否是文件夹

              是:回到B  

              否:就删除

public class FileDeleteDemo {
    public static void main(String[] args) {
        //封装目录
        File file = new File("demo");
        // 递归方式实现
        deleteFolder(file);
    }
    //递归方法
    private static void deleteFolder(File srcFolder) {
        // 获取该目录下的所有文件或者文件夹的File数组
        File[] fileArray = srcFolder.listFiles();
        //遍历该File数组,得到每一个File对象
        for (File file : fileArray) {
            // 判断该File对象是否是文件夹
            if (file.isDirectory()) {
                deleteFolder(file); // 递归调用
            }
            System.out.println(file.getName() + "----" + file.delete());
        }
        //删除本级空文件夹
        System.out.println(srcFolder.getName() + "----" + srcFolder.delete());
    }
}