java基础之File类文件

1. 概述

File类是文件和目录 路径名的表示,主要用于文件和目录的创建、查找和删除等操作。

文件(File): Xxx.txt, Xxx.java, Xxx.avi

目录(Directory): 文件夹

文件路径 文件夹路径

FIle可以表示文件或文件夹的路径, 但是这个路径可能存在, 也可能不存在

2.file构造方法

public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。  
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。  

绝对路径 : 从盘符开始, 一直表示到最后的文件或者文件夹

相对路径 : 相对于某一个文件夹开始, 后面的路径

这里来举两个例子来进行说明:

demo1:

File fileOne = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");

one是一个文件夹,那么fileOne代表的就是windows操作系统下的一个文件夹,我们可以来操作这个文件夹下面的文件和文件夹。

demo2:

File file = new File(fileOne,"a.txt");

在上面的文件夹基础之上,建立一个名叫a.txt的文件,那么file代表的就是名叫a.txt的文件

demo3:

File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one","lalal.txt");

3.file的创建方法

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 //file.createNewFile()
public boolean mkdir():创建由此File表示的目录。/单级文件夹,返回是否创建成功
public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。//     多级: 创建前面必须但不存在的文件夹

举例说明:

File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one","lalal.txt");
System.out.println("文件的绝对路径是:"+file.getAbsolutePath());
if (!file.exists()){
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
System.out.println("文件的大小是:"+file.length());

判断是否存在这个文件,如果存在,那么直接输出对应的文件大小即可。如果不存在,那么创建文件并输出。

        File newFile = new File(fileOne,"hello/world/a");
        if (!newFile.exists()){
            // newFile.mkdir();
            newFile.mkdirs();
        }

使用mkdir这个方法,无法创建出来对应的文件夹,因为这里有多层,而不是单层;

使用mkdirs这个方法,不管是单层文件夹还是多层文件夹,都可以创建成功。

4.删除方法

public boolean delete() :删除由此File表示的文件或目录。//file.delete())
    特点: 
	    1. 删除的内容不走回收站
        2. 只能删除空文件件

demo:

        File newFile = new File(fileOne,"hello/world/a");
        if (!newFile.exists()){
            newFile.mkdirs();
        }
        newFile.delete();

在进行删除的时候可以发现,删除的只有一层,也就是说只把a的给删除掉了,因为newFile代表的就只是a这个文件夹,而不是hello/world/a这一整个目录。

5.获取功能

public String getAbsolutePath()  :返回此File的绝对路径名字符串。
public String getPath()  :将此File转换为路径名字符串。 获取构造方法中的路径
public String getName()  :返回由此File表示的文件或目录的名称。  
public long length()  :返回由此File表示的文件的长度。  (字节个数)不能获取文件夹的长度,

对应的demo如下所示:

    public static void main(String[] args) {
        File fileOne = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
        // 三个判断方法
        if (fileOne.isDirectory()){
            System.out.println("这个是文件夹");
        }
        if (fileOne.isFile()){
            System.out.println("这个是文件夹");
        }
        if (fileOne.exists()){
            System.out.println("当前文件所表示的文件或者是文件夹是否存在?"+fileOne.exists());
        }

        System.out.println("获取方法");
        System.out.println("-----------------------------------------------------------");
        // 获取得到路径是一样的效果
        String absolutePath = fileOne.getAbsolutePath();
        System.out.println("当前文件的绝对路径是:"+absolutePath);
        String path = fileOne.getPath();
        System.out.println("当前文件的路径是:"+path);
        String name = fileOne.getName();
        System.out.println("获取得到文件的名称或者是文件夹的文字是:"+name);
        // 获取得到文件的大小,不能够表示文件夹的大小
        long length = fileOne.length();
        System.out.println("文件夹的大小是:"+length);
        // 创建一个文件a.txt
        File file = new File(fileOne,"a.txt");
        long length1 = file.length();
        System.out.println("a.txt文件的大小是:"+length1);
        System.out.println("获取得到a.txt的绝对路径是:"+file.getAbsolutePath());
    }

6.判断方法

public boolean exists() :此File表示的文件或目录是否实际存在。//file.exists()
public boolean isDirectory() :此File表示的是否为目录。//同上
public boolean isFile() :此File表示的是否为文件。//同上

具体的demo可以参考上面的案例。

7.遍历文件夹

获取当前文件夹下(一层)中, 所有的文件和文件夹

String[] list() : 获取该文件夹下所有文件和文件夹的名字
File[] listFiles() : 获取该文件夹下所有文件和文件夹(以File的形式获取)
File[] listFiles(FileFilter) :当前文件夹中的所有文件和文件夹, 都会作为参数执行FileFilter中的accept方法, 
							如果返回true, 文件就存入File数组中; 
							如果返回false, 文件就不存了

对应的代码所示:

    public static void main(String[] args) {
        File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
        // 列举出来文件夹下面的所有的文件和文件夹(如果是文件夹,里面还有文件,那么只会列举出来文件夹的名称)
        String[] list = file.list();
        for (String s : list) {
            System.out.println("文件或者是文件夹的名称是:"+s);
        }
        System.out.println("--------------------");
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()){
                System.out.println("文件名称是:"+file1.getName());
            }
        }
        System.out.println("----------------------");
        File[] listFilesFilter = file.listFiles(t -> t.isFile() & t.getName().endsWith("a.txt"));
        for (File file1 : listFilesFilter) {
            System.out.println(file1.getName());
        }
    }

8、递归遍历文件夹并输出文件

public class FileDemoThree {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
        printFileName(file);
    }


    /**
     * 递归输出文件名称
     */
    private static void printFileName(File file){
        if (Objects.nonNull(file)){
            File[] listFiles = file.listFiles();
            for (File listFile : listFiles) {
                if (listFile.isFile()){
                    System.out.println("对应的文件名称是:"+listFile.getName());
                }else {
                    printFileName(listFile);
                }
            }
        }
    }

}

在递归期间的注意事项:

1. 递归必须要有出口
2. 就算有出口, 调用的次数不能过多
上一篇:input下拉框


下一篇:CentOS下MySQL数据库服务器的构建方法