Java中File文件类操作使用方法大全

  • File类概述
  • File类的常用API
  • 判断文件类型、获取文件信息
  • 创建文件、删除文件功能
  • 遍历文件夹
  • File类相关的API的练习题


File类概述

File类在包java.io.File下、代表操作系统的文件对象(文件、文件夹)。
File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能。

File类创建对象

方法名称

说明

public File (String pathname)

根据文件路径创建文件对象

public File (String parent, String child)

从父路径名字符串和子路径名字符串创建文件对象

public File (File parent, String child)

根据父路径对应文件对象和子路径名字符串创建文件对象

绝对路径和相对路径

绝对路径:从盘符开始  ,File file1 = new File(“D:\\itheima\\a.txt”); 
相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。File file3 = new File(“模块名\\a.txt”);

代码测试案例

import java.io.File;

public class FileDemo1 {
    public static void main(String[] args) {
        // 1. 创建File对象(指定文件的路径)
        // 绝对路径有三种方法:
        // E:\resourse\4.jpg 但是这种的斜杠需要进行转义,原因在于\n,\t等,为了告诉\它本身是\,所以一般写成\\
        // E:/resorse/4.jpg 这种方式就不需要再进行斜杠专业了
        // 使用File.separator或者文件夹之间的连接
//        File file1 = new File("E:\\resourse\\4.jpg");
//        File file1 = new File("E:/resourse/4.jpg");
        File file1 = new File("E:" + File.separator + "resourse" + File.separator + "4.jpg");
        long size1 = file1.length();
        System.out.println(size1);

        System.out.println("==================================");
        // 2、 File创建文件对象,支持绝对路径和相对路径两种方式--重点掌握
        File file2 = new File("E:\\resourse\\test.txt");
        System.out.println(file2.length());

        // 相对路径:一般定位模块中的文件,相对到moudle工程下面
        File file3 = new File("Day10/src/test.txt");
        File file4 = new File(".../test.txt");
        System.out.println(file3.length());
        System.out.println(file4.exists());
        System.out.println(file4.length());
        System.out.println(file3.canRead());

        System.out.println("==================================");
        // 3、File创建对象,可以是文件也可以是一个文件夹
        File file = new File("E:\\resourse");
        System.out.println(file.exists());  // true
        System.out.println(file.length());  // 不可以直接获取文件夹的大小,要想获取文件夹的大小,需要依次遍历文件夹中的文件
        System.out.println(file.isFile());  // false
        System.out.println(file.isDirectory());  // true
        String name = file.getName();
        System.out.println(name);

    }
}

问题1、File类的作用?
创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容

问题2、File类构建对象的方式 ?
File file = new File(“文件/文件/绝对路径/相对路径”);

问题3、绝对路径和相对路径是什么样的?
绝对路径是带盘符的,依赖当前系统。相对路径是不带盘符的,默认相对到工程下开始寻找文件

File类的常用API

判断文件类型、获取文件信息

File类的判断文件类型、获取文件信息功能:

方法名称

说明

public boolean isDirectory()

测试此抽象路径名表示的File是否为文件夹

public booleean isFile()

测试此抽象路径名表示的File是否为文件

public boolean exists()

测试此抽象路径名表示的File是否存在

public String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串

public String getPath()

将此抽象路径名转换为路径名字符串

public String getName()

返回由此抽象路径名表示的文件或文件夹的名称

public long lastModified()

返回文件最后修改的时间毫秒值

public File (String parent, String child)

从父路径名字符串和子路径名字符串创建文件对象

public File (File parent, String child)

根据父路径对应文件对象和子路径名字符串创建文件对象

代码测试案例

import java.io.File;
import java.text.SimpleDateFormat;

/**
    目标:File类的获取功能的API
    - public String getAbsolutePath()  :返回此File的绝对路径名字符串。
    - public String getPath()  : 获取创建文件对象的时候用的路径
    - public String getName()  : 返回由此File表示的文件或目录的名称。
    - public long length()  :    返回由此File表示的文件的长度。
 */
public class FileDemo2 {
    public static void main(String[] args) {
        // 1.绝对路径创建一个文件对象
        File file = new File("E:/resource/test.txt");  // 斜杆方向的盘符就不用再加上转义的斜杠了
        // a.获取它的绝对路径。
        File absoluteFile = file.getAbsoluteFile();
        System.out.println(absoluteFile);  // E:/resource/test.txt

        // b.获取文件定义的时候使用的路径。
        String path = file.getPath();
        System.out.println(path);  // E:/resource/test.txt

        // c.获取文件的名称:带后缀。
        String name = file.getName();
        System.out.println("文件名称:" + name);   // 文件名称:test.txt

        // d.获取文件的大小:字节个数。
        System.out.println("文件大写为:" + file.length());  // 7

        // e.获取文件的最后修改时间
        long l = file.lastModified();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
        String format = sdf.format(l);
        System.out.println("时间日期为:" + format);  // 2022-04-23 23:16:47:559

        // f、判断文件是文件还是文件夹
        System.out.println(file.isFile());  // true
        System.out.println(file.isDirectory()); // false


        System.out.println("---------------------------------------------------------");
        File file1 = new File("Day10\\src\\test.txt");  // 相对路径
        // a.获取它的绝对路径。
        File absoluteFile1 = file1.getAbsoluteFile();
        System.out.println(absoluteFile1);  // D:\JavaProMax_day13\Day10\src\test.txt

        // b.获取文件定义的时候使用的路径。
        String path1 = file1.getPath();
        System.out.println(path1);  // Day10\src\test.txt

        // c.获取文件的名称:带后缀。
        String name1 = file1.getName();
        System.out.println(name1);  // test.txt

        // d.获取文件的大小:字节个数。
        long length = file1.length();
        System.out.println(length);   // 46

        // e.获取文件的最后修改时间
        System.out.println(new SimpleDateFormat("yyyy/MM//dd HH:mm:ss:SS").format(file1.lastModified()));  // 2022/04//29 15:12:08:601

        // f、判断文件是文件还是文件夹
        System.out.println(file.isFile());  // true
        System.out.println(file.isDirectory());  // false

        System.out.println("-------------------------");
        File file3 = new File("D:/");
        System.out.println(file3.isFile());  // false
        System.out.println(file3.isDirectory());  // true
        System.out.println(file3.exists()); // true

        System.out.println("-------------------------");
        File file4 = new File("D:/aaa");  // 不存在该文件或者文件夹
        System.out.println(file4.isFile());  // false
        System.out.println(file4.isDirectory());  // false
        System.out.println(file4.exists());  // false
    }
}

创建文件、删除文件功能

File类创建文件的功能

方法名称

说明

public boolean createNewFile()

创建一个新的空的文件

public boolean mkdir()

只能创建一级文件夹

public boolean mkdirs()

可以创建多级文件夹

File类删除文件的功能

方法名称

说明

public boolean delete()

删除由此抽象路径名表示的文件或空文件夹

注意:delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站

代码实现:

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

/**
 目标:File类的创建和删除的方法
 - public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,
 创建一个新的空文件。 (几乎不用的,因为以后文件都是自动创建的!)
 - public boolean delete() :删除由此File表示的文件或目录。 (只能删除空目录)
 - public boolean mkdir() :创建由此File表示的目录。(只能创建一级目录)
 - public boolean mkdirs() :可以创建多级目录(建议使用的)
 */
public class FileDemo3 {
    public static void main(String[] args) throws IOException {
        // a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
        File f = new File("Day10\\src\\test.txt");
        boolean newFile = f.createNewFile();  // 在相对路径Day10\src下创建text.txt文件,如果存在创建失败,反之成功
        System.out.println(newFile);

        File f1 = new File("Day10\\src\\test2.txt");
        boolean newFile1 = f1.createNewFile();  //
        System.out.println(newFile1);

        // b.mkdir创建一级目录
        File file = new File("E:\\aaaaaa");
        boolean mkdir = file.mkdir();
        System.out.println(mkdir);

        // c.mkdirs创建多级目录(重点)
        File file1 = new File("E:/abc/efg/hig/eng");
        boolean mkdirs = file1.mkdirs();
        System.out.println(mkdirs);
        
        // d.删除文件或者空文件夹
         // 占用一样可以删除
        System.out.println(file.delete());  // true

        // 只能删除空文件夹,不能删除非空文件夹.
        System.out.println(file1.delete());  //
    }
}

问题1:创建多级目录使用哪个方法?
public boolean mkdirs()

问题2:删除文件需要注意什么?
可以删除文件、空文件夹。默认不能删除非空文件夹。

遍历文件夹

File类的遍历功能

方法名称

说明

public String[] list()

获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。

public File[] listFiles()(常用)

获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点

listFiles方法注意事项:

1、当调用者不存在时,返回null;
2、当调用者是一个文件时,返回null;
3、当调用者是一个需要权限才能进入的文件夹时,返回null;
4、当调用者是一个空文件夹时,返回一个长度为0的数组
5、当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
6、当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容

测试代码:

import java.io.File;
import java.util.Arrays;

/**
 目标:File针对目录的遍历
 - public String[] list(): 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
 - public File[] listFiles()(常用): 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
 */
public class FileDemo4 {
    public static void main(String[] args) {
        // 1. 定位一个目录,要是一个文件会返回null
        File file = new File("E:/resourse");
        String[] names = file.list();
        for(String str : names){
            System.out.println(str);
        }
        System.out.println("------------------------------");
        // 2. 一级文件对象,
        // 获取当前目录下所有的一级文件对象到一个文件对象数组中去返回
        File[] files = file.listFiles();
        for(File fileList : files){
            System.out.println(fileList + "--" + fileList.length());
        }
        System.out.println("------------------------------------"
        );
        // 3. 注意事项
        File file1 = new File("G:/");  // 调用者不存在返回null
        File[] files1 = file1.listFiles();
        String[] list = file1.list();
        System.out.println(list);  // null
        System.out.println(files1);  // null

        System.out.println("-------------------------------");
        File file2 = new File("Day10\\src\\test.txt");  // 调用者是一个文件的时候返回null
        File[] files2 = file2.listFiles();
        String[] list1 = file2.list();
        System.out.println(list1);  // null
        System.out.println(files2);  // null

        System.out.println("================================");
        File file3 = new File("E:\\aaaa");  // 调用者是一个空的文件夹时候,返回空的数组
        File[] files3 = file3.listFiles();
        String[] list2 = file3.list();
        System.out.println(files3);  // 地址
        System.out.println(list2);  // 地址
        System.out.println(Arrays.toString(list2));  // []
        System.out.println(Arrays.toString(files3));  // []
    }
}

File类相关的API的练习题

需求1:统计一个文件夹中每种文件的个数并打印。

打印格式如下:
txt:3个
doc:4个
jpg:6个

例如统计E盘下的文件信息:

File文件全路径 java java file 文件路径_System

代码实现:

import java.io.File;

public class Test {
    public static void main(String[] args) {
        // 访问一个文件夹
        File file = new File("E:/resource");

        int txtCount = 0, jpgCount = 0, docCount = 0, otherCount = 0;
        String[] list = file.list();  // 获取当前目录下所有的”一级文件名称“到一个字符串数组中
        
        // 增强for循环遍历数组
        for (String name : list){
            if(name.endsWith("txt")){  // 调用String类的endsWith(String str)函数表示是否以str结尾,如果是返回true
                txtCount++;
            }else if(name.endsWith("doc")){
                docCount++;
            }else if(name.endsWith("jpg")){
                jpgCount++;
            }else {
                otherCount++;
            }
        }
        System.out.println("txt: " + txtCount);
        System.out.println("jpg: " + jpgCount);
        System.out.println("doc: " + docCount);
        System.out.println("other: " + otherCount);
    }
}

实验结果:

File文件全路径 java java file 文件路径_File文件全路径 java_02


需求2:将某个文件夹下的一级文件对象,按照最近修改时间降序展示,并显示修改时间

打印格式如下:
aaa.txt:  2021-03-22 10:23:23
dlei.doc: 2021-03-21 8:23:23
meinv.jpg:6个 2008-11-11 11:11:11

代码实现:

import java.io.File;
import java.text.SimpleDateFormat;

public class Test1 {
    public static void main(String[] args) {
        File file = new File("E:/resource");

        File[] files = file.listFiles();  // 获取当前目录下所有的一级文件对象到一个文件对象数组中

        // 冒泡排序
        for (int i = 0; i < files.length-1; i++) {
            for (int j = i+1; j < files.length; j++) {
                if(files[i].lastModified() < files[j].lastModified()){
                    File temp = files[i];
                    files[i] = files[j];
                    files[j] = temp;
                }
            }
        }

        // 打印信息
        for(File tempFile : files){
            System.out.println(tempFile.getName() + ": " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tempFile.lastModified()));
        }
    }
}

实验结果:

File文件全路径 java java file 文件路径_File文件全路径 java_03