一、Java中的 File 类

目录

1.File 类的概述

2.File 类的静态属性与构造方法

3.File 类常用方法

4.递归遍历文件夹


1.File 类的概述

存储在变量、数组和对象中的数据是暂时的,当程序终止时他们就会丢失。为了能够永久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中,这些文件可以移动、传输,亦可以被其他程序使用,Java 中为我们提供了一个专门用于操作文件和文件夹的实体类 File 类,这是一个与操作系统无关的类,任何的操作系统都可以使用此类操作文件。

File 类以抽象的方式代表文件名和目录路径名,只是记录了文件和目录的引用地址,但并不代表具体的文件或者目录。因此实例化一个 File 对象并不等于创建了一个文件,而是记录了一个引用地址,若想创建和删除文件必须根据 File 所记录的引用地址调用系统本地方法来执行操作。


2.File 类的静态属性与构造方法

(1)绝对路径与相对路径

绝对路径:以盘符开头的完整的路径,如 D:\ java-2018-12 \ idea 。系统检索路径时一定会从盘符开始自上往下检索。

相对路径:简化的路径,一般不写盘符,文件位置是相对而言的。系统在检索路径时会从当前所在的根目录开始检索。

(2)静态属性

static StringpathSeparator
          与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static Stringseparator
          与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

在文件路径名中,存在两种分隔符:一种用来分割不同的路径名,称之为路径分隔符Windows 中用分号表示,而 Linux 中用冒号表示; 另一种用来分割同一路径名层次结构,称之为文件名称分隔符Windows 中用反斜杠表示,而 Linux 中用正斜杠表示

上面 File 中的两个静态属性正好对应了这两种分隔符,下面打印一下这两个分隔符:

System.out.println("Windows路径分隔符:" + File.pathSeparator);
System.out.println("Windows文件名称分隔符:" + File.separator);

Windows路径分隔符:;
Windows文件名称分隔符:\

(3)构造方法

File(String pathname)
          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(File parent, String child)
          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String parent, String child)
          根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
        //1.第一个构造方法
        File directory = new File("D:\\testDirectory");
        //2.第二个构造方法
        File file1 = new File(directory,"file1.xml");
        //3.第三个构造方法
        File file2 = new File("D:\\testDirectory","file2.xml");

3.File 类常用方法

(1)操作文件

 booleancreateNewFile()
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
 booleandelete()
          删除此抽象路径名表示的文件或目录。
 boolean

exists()
          测试此抽象路径名表示的文件或目录是否存在。

首先使用相对路径在当前项目的 day08 包中创建一个文件:

        //1.相对路径在当前项目中创建文件
        File file = new File("src\\com\\java\\day08\\file.xml");
        //2.判断文件是否存在
        System.out.println(file.exists());//false
        //3.在当前路径创建文件
        boolean flag = file.createNewFile();//true
        //4.判断文件是否存在
        System.out.println(file.exists());//true

     

删除上面创建的文件:

        //1.判断文件是否存在
        System.out.println(file.exists());//true
        //2.删除创建的文件
        file.delete();
        //3.判断文件是否存在
        System.out.println(file.exists());//false

(2)文件信息获取

 booleanisAbsolute()
          测试此抽象路径名是否为绝对路径名。
 StringgetAbsolutePath()
          返回此抽象路径名的绝对路径名字符串。
 StringgetPath()
          将此抽象路径名转换为一个路径名字符串。
 longlength()
          返回由此抽象路径名表示的文件的长度。
 StringgetName()
          返回由此抽象路径名表示的文件或目录的名称。
 StringtoString()
          返回此抽象路径名的路径名字符串,默认调用 getPath() 方法。
 booleanisDirectory()
          测试此抽象路径名表示的文件是否是一个目录。
 boolean

isFile()
          测试此抽象路径名表示的文件是否是一个标准文件。

获取上面所创建文件的信息:

        //1.获取文件绝对路径
        System.out.println("1、"+file.getAbsolutePath());
        //2.获取文件相对路径
        System.out.println("2、"+file.getPath());
        //3.获取文件大小
        System.out.println("3、"+file.length());
        //4.获取文件名
        System.out.println("4、"+file.getName());
        //5.获取文件字符串形式
        System.out.println("5、"+file.toString());

打印获取到的文件信息:

1、D:\java-2018-12\JavaSE\src\com\java\day08\file.xml
2、src\com\java\day08\file.xml
3、0
4、file.xml
5、src\com\java\day08\file.xml

(3)目录层次结构

 String[]list()
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
 File[]listFiles()
          返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
 booleanmkdir()
          创建此抽象路径名指定的目录。
 booleanmkdirs()
          创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

使用绝对路径在 D 盘中创建一个多层目录:此处应该用 mkdirs() 而不用 mkdir() ,mkdir() 只能在已存在的目录中创建文件夹。

        String pathName = "D:\\bigDir\\middleDir\\smallDir";
        File directory = new File(pathName);
        directory.mkdirs();//创建多层文件夹

 注意:在删除文件夹时,若文件夹内有内容,必须先删除文件夹中的内容,再删除文件夹。

下面对当前项目的 com.java 文件夹进行遍历打印文件名:

       

        String pathName = "src\\com\\java";
        File directory = new File(pathName);
        //获取目录中的文件/文件夹名
        String[] strings = directory.list();
        for (String s:strings){
            System.out.println(s);
        }

        执行结果:

        day01
        day02
        day03
        day04
        day05
        day06
        day07
        day08
        数据结构

(4)文件权限与状态

 booleansetExecutable(boolean executable)
          设置此抽象路径名所有者执行权限的一个便捷方法。
 booleancanExecute()
          测试应用程序是否可以执行此抽象路径名表示的文件。
 booleansetReadable(boolean readable)
          设置此抽象路径名所有者读权限的一个便捷方法。
 booleancanRead()
          测试应用程序是否可以读取此抽象路径名表示的文件。
 booleansetReadOnly()
          标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
 booleansetWritable(boolean writable)
          设置此抽象路径名所有者写权限的一个便捷方法。
 booleancanWrite()
          测试应用程序是否可以修改此抽象路径名表示的文件。
 booleanisHidden()
          测试此抽象路径名指定的文件是否是一个隐藏文件。

下面设置并打印 day08 中的 file.xml 文件的权限与状态:

        //1.将文件设置为可直接执行(运行)
        //如.exe文件就是可执行文件
        file.setExecutable(true);
        //2.设置文件为可读
        file.setReadable(true);
        //3.设置文件为不可写
        file.setWritable(false);

此时打开此文件的属性面板:可以看到文件只能被读取和执行,不能够被写入。


4.递归遍历文件夹

首先定义一个遍历文件目录的方法:

    private static void getList(File file, int i) {

        //判断文件是否存在
        if (!file.exists()) return;

        //打印文件/文件夹名
        //根据层次打印空格
        for (int j = 0; j < i; j++) {
            System.out.print(" ");
        }
        System.out.print(file.getName() + "\n");

        //判断是否为文件,若为目录递归调用
        if (file.isFile()) return;

        //获取文件夹内容
        File[] directoryFile = file.listFiles();

        //递归打印
        //每个层次缩进两个空格
        for (File temp : directoryFile) {
            getList(temp, i + 2);
        }
    }

调用这个方法打印此文件夹内容:D:\小橘子\500套 新简历模板

        String pathName = "D:\\小橘子\\500套 新简历模板";
        File file = new File(pathName);
        getList(file,0);

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页