文章目录

  • 前言
  • 一、File类简介
  • 二、公共静态字段
  • 三、构造方法
  • 成员方法
  • 成员方法简述
  • 常用成员方法详解

前言

Java API提供的文件和目录路径名的抽象表示,访问、操作文件系统的对象。

一、File类简介

java模板 ftl 文件_开发语言

  • File类实现了Serializable和Comparable两个接口。
  • File类的实例可以表示或不表示实际的文件系统对象,例如文件或目录。 如果它表示这样一个对象,那么该对象驻留在一个分区中 。 分区是文件系统的特定于操作系统的存储部分。 单个存储设备(例如物理磁盘驱动器,闪存,CD-ROM)可能包含多个分区。 该对象(如果有的话)将驻留在该路径名的绝对形式的一些分区named上。
  • 文件系统可以对实际的文件系统对象上的某些操作实施限制,例如读取,写入和执行。 这些限制统称为访问权限 。 文件系统对单个对象可以具有多组访问权限。 例如,一组可能适用于对象的所有者 ,另一组可能适用于所有其他用户。 对象的访问权限可能会导致此类中的某些方法失败。
  • File类的实例是不可变的; 也就是说,一旦创建,由File对象表示的抽象路径名永远不会改变。

二、公共静态字段

Modifier

Type

Field

Description

static

String

pathSeparator

与系统相关的路径分隔符字符,为方便起见,表示为字符串。

static

char

pathSeparatorChar

与系统相关的路径分隔符。

static

String

separator

与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。

static

char

separatorChar

与系统相关的默认名称分隔符。

  • pathSeparator
    和pathSeparatorChar
    在UNIX系统上,这个字符是’:’ ; 在Microsoft Windows系统上它是’;’ 。
    下面是jdk源码,pathSeparator是将pathSeparatorChar转成字符串后的值。
public static final String pathSeparator = "" + pathSeparatorChar;
  • separator 和 separatorChar
    在UNIX系统上,该字段的值为’/’ ; 在Microsoft Windows系统上是’\’ 。
    separator 是将separatorChar转为字符串后的值。
public static final String separator = "" + separatorChar;

三、构造方法

File类共有4个构造方法进行实例化对象:

Constructor

Description

File(File parent, String child)

从父抽象路径名和子路径名字符串创建新的 File实例。

File(String pathname)

通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

File(String parent, String child)

从父路径名字符串和子路径名字符串创建新的 File实例。

File(URI uri)

通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。

  1. File(String pathname)
    我们最常用的构造方法是File(String pathname),通过给定的pathName创建File对象。
    接下开看下代码示例:
public static void ConstructorTest(){
        //在F盘下创建fild1.txt 文件
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"file1.txt";
        File file1 = new File(path);
        System.out.println("file1对象:" + file1);
        //控制台输出 file1对象:F:\Java Learning Notes\fileLearn\file1.txt
    }
  1. File(File parent, String child)
public static void ConstructorTest2(){
        //子路径
        String chaildPath = "fileLearn" + File.separator + "file1.txt";
        //父路径
        String parentPath = "F:" + File.separator + "Java Learning Notes";

        File parentFild = new File(parentPath);
        File childFile = new File(parentFild,chaildPath);
        System.out.println("parentFild对象:" + parentFild);
        System.out.println("filechildFile对象:" + childFile);
        //parentFild对象:F:\Java Learning Notes
        //filechildFile对象:F:\Java Learning Notes\fileLearn\file1.txt

    }
  1. File(String parent, String child)
public static void ConstructorTest3(){
        //子路径
        String chaildPath = "fileLearn" + File.separator + "file1.txt";
        //父路径
        String parentPath = "F:" + File.separator + "Java Learning Notes";

        File childFile = new File(parentPath,chaildPath);
        System.out.println("filechildFile对象:" + childFile);
        //filechildFile对象:F:\Java Learning Notes\fileLearn\file1.txt

    }
  1. File(URI uri)
public static void ConstructorTest4() throws Exception {
        File file = new File(new URI("file:///F:/JavaLearningNotes/fileLearn/file1.txt"));
        System.out.println("file对象:" + file);
        //file对象:F:\Java Learning Notes\fileLearn\file1.txt
    }

成员方法

以下是File的成员方法展示和常用成员方法代码样例展示。存在代码样例的是会进行详细讲解,其他成员方法有兴趣的可以自己敲下代码实现。

成员方法简述

modifier and Type

Method

Description

代码样例

int

compareTo(File pathname)

比较两个抽象的路径名字典。

点击跳转

boolean

createNewFile()

当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。

点击跳转

boolean

isDirectory()

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

点击跳转

boolean

isFile()

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

点击跳转

boolean

exists()

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

点击跳转

boolean

mkdir()

创建由此抽象路径名命名的目录。

点击跳转

boolean

mkdirs()

创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。

点击跳转

File[]

listFiles()

返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。

点击跳转

boolean

delete()

删除由此抽象路径名表示的文件或目录。

点击跳转

String

getPath()

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

boolean

canExecute()

测试应用程序是否可以执行此抽象路径名表示的文件。

boolean

canRead()

测试应用程序是否可以读取由此抽象路径名表示的文件。

boolean

canWrite()

测试应用程序是否可以修改由此抽象路径名表示的文件。

boolean

renameTo(File dest)

重命名由此抽象路径名表示的文件。

static File

createTempFile(String prefix, String suffix)

在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。

static File

createTempFile(String prefix, String suffix, File directory)

在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。

void

deleteOnExit()

请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。

boolean

equals(Object obj)

测试此抽象路径名与给定对象的相等性。

File

getAbsoluteFile()

返回此抽象路径名的绝对形式。

String

getAbsolutePath()

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

File

getCanonicalFile()

返回此抽象路径名的规范形式。

String

getCanonicalPath()

返回此抽象路径名的规范路径名字符串。

long

getFreeSpace()

返回分区未分配的字节数 named此抽象路径名。

String

getName()

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

String

getParent()

返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。

File

getParentFile()

返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。

long

getTotalSpace()

通过此抽象路径名返回分区 named的大小。

long

getUsableSpace()

返回上的分区提供给该虚拟机的字节数 named此抽象路径名。

int

hashCode()

计算此抽象路径名的哈希码。

boolean

isAbsolute()

测试这个抽象路径名是否是绝对的。

boolean

isHidden()

测试此抽象路径名命名的文件是否为隐藏文件。

long

lastModified()

返回此抽象路径名表示的文件上次修改的时间。

long

length()

返回由此抽象路径名表示的文件的长度。

String[]

list()

返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。

String[]

list(FilenameFilter filter)

返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。

File[]

listFiles(FileFilter filter)

返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

File[]

listFiles(FilenameFilter filter)

返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

boolean

setExecutable(boolean executable)

为此抽象路径名设置所有者的执行权限的便利方法。

boolean

setExecutable(boolean executable, boolean ownerOnly)

设置该抽象路径名的所有者或每个人的执行权限。

boolean

setLastModified(long time)

设置由此抽象路径名命名的文件或目录的最后修改时间。

boolean

setReadable(boolean readable)

一种方便的方法来设置所有者对此抽象路径名的读取权限。

boolean

setReadable(boolean readable, boolean ownerOnly)

设置此抽象路径名的所有者或每个人的读取权限。

boolean

setReadOnly()

标记由此抽象路径名命名的文件或目录,以便只允许读取操作。

boolean

setWritable(boolean writable)

一种方便的方法来设置所有者对此抽象路径名的写入权限。

boolean

setWritable(boolean writable, boolean ownerOnly)

设置此抽象路径名的所有者或每个人的写入权限。

Path

toPath()

返回从此抽象路径构造的java.nio.file.Path对象。

String

toString()

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

URI

toURI()

构造一个表示此抽象路径名的 file: URI。

常用成员方法详解

  1. compareTo(File pathname)

如果参数等于此抽象路径名,则为零,如果此抽象路径名在字典上小于参数,则小于零的值,或者如果此抽象路径名在词法上大于参数,则该值大于零

代码样例如下:

public static void MtthodTest() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"file.txt";
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"file.txt";
        String path2 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"file2.txt";
        File file = new File(path);
        File file1 = new File(path1);
        File file2 = new File(path2);
        //路径相同
        System.out.println(file.compareTo(file1));
        //file路径小于file2
        System.out.println(file.compareTo(file2));
        //控制台返回
        //0
        //-4        
    }
  1. createNewFile()
当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 检查文件的存在和文件的创建(如果不存在)是对可能影响文件的所有其他文件系统活动是单一的操作。

java模板 ftl 文件_开发语言_02


如上图,fileLearn目录下是空的,那么执行createNewFile()方法后会怎么?


代码样例如下:

public static void methodTest1() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1.txt";
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1"+File.separator+"file.txt";
        File file = new File(path);
        File file1 = new File(path1);
        //文件路径存在
        System.out.println(file.createNewFile());
        //文件路径不存在
        System.out.println(file1.createNewFile());
    }

首先看下执行结果,file调用createNewFile()返回true,但是file1抛出异常“java.io.IOException: 系统找不到指定的路径。”。找不到指定路径。

java模板 ftl 文件_java模板 ftl 文件_03

file创建的空文件。

java模板 ftl 文件_路径名_04


所以,createNewFile()方法只能创建文件,不会创建路径,创建文件前必须校验目录存在,否在会抛出找IOException():找不到指定文件

如果文件已经存在,继续执行会返回false,不会重复创建。

  1. isDirectory()

测试此抽象路径名表示的文件是否为目录。结果: true当且仅当该抽象路径名表示的文件存在且为目录时; false相反。

public static void methodTest2() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1.txt";
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1";
        String path2 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator;
        File file = new File(path);
        File file1 = new File(path1);
        File file2 = new File(path2);

        //判断文件是否目录
        System.out.println(file.isDirectory()); // 结果 : false
        System.out.println(file1.isDirectory()); // 结果 : false
        System.out.println(file2.isDirectory()); // 结果 : true
    }

java模板 ftl 文件_Java_05


文件状态为上一步执行后的文件状态。

  1. isFile()

测试此抽象路径名表示的文件是否为普通文件。结果:true当且仅当该抽象路径名表示的文件存在且为普通文件时; false相反。

代码样例如下:

public static void methodTest3() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1.txt";
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1";
        File file = new File(path);
        File file1 = new File(path1);

        //判断文件是否普通文件
        System.out.println(file.isFile()); // 结果 : true
        System.out.println(file1.isFile()); // 结果 : false
    }

java模板 ftl 文件_Java_05

  1. exists()

测试此抽象路径名表示的文件或目录是否存在。结果true:当且仅当存在由此抽象路径名表示的文件或目录;false:不存在由此抽象路径名表示的文件或目录。

代码样例如下:

public static void methodTest4() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1.txt";
        String path01 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest2.txt";
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator;
        String path2 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1";
        File file = new File(path);
        File file01 = new File(path01);
        File file1 = new File(path1);
        File file2 = new File(path2);

        //判断文件或目录是否存在
        System.out.println(file.exists()); // 结果 : true
        System.out.println(file01.exists()); // 结果 : false
        System.out.println(file1.exists()); // 结果 : true
        System.out.println(file2.exists()); // 结果 : false

    }

java模板 ftl 文件_Java_05

  1. mkdir()

创建由此抽象路径名命名的目录。结果:true当且仅当该目录被创建时; false相反。

示例代码如下:

public static void methodTest5() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator;
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1" + File.separator+"methodTest2" ;
        String path2 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1" ;
        File file = new File(path);
        File file1 = new File(path1);
        File file2 = new File(path2);
        //判断目录是否存在,
        System.out.println(file.mkdir()); // 结果 : false
        System.out.println(file1.mkdir()); // 结果 : false
        System.out.println(file2.mkdir()); // 结果 : true
        System.out.println(file1.mkdir()); // 结果 : true
    }

java模板 ftl 文件_java模板 ftl 文件_08


mkdir()方法无法创建父目录,当父目录不存在时则会返回false

  1. mkdirs()

创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 请注意,如果此操作失败,它可能已成功创建一些必需的父目录。结果: true当且仅当该目录已创建,以及所有必需的父目录; false相反。

将文件路径还原:

java模板 ftl 文件_Java_09


示例代码如下:

public static void methodTest5() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator;
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1" + File.separator+"methodTest2" ;
        String path2 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1" ;
        File file = new File(path);
        File file1 = new File(path1);
        File file2 = new File(path2);
        //创建目录
        System.out.println(file.mkdirs()); // 结果 : false
        System.out.println(file1.mkdirs()); // 结果 : true
        System.out.println(file2.mkdirs()); // 结果 : false
        System.out.println(file1.mkdirs()); // 结果 : false
    }

java模板 ftl 文件_java_10


对于mkdirs()会将父级目录一并创建

  1. listFiles()

返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
如果此抽象路径名不表示目录,则此方法返回null否则将返回一个File对象的数组表示目录本身和目录的父目录的路径名不包括在结果中。 每个生成的抽象路径名由使用File(File, String)构造函数的抽象路径名构造。 因此,如果这个路径名是绝对的,那么每个生成的路径名是绝对的; 如果此路径名是相对的,那么每个生成的路径名将相对于相同的目录。

示例代码如下:

public static void methodTest5() throws Exception {
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator;
        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1.txt";
        File file = new File(path);
        File file1 = new File(path1);
        for (File listFile : file.listFiles()) {
            System.out.println("file :" + listFile.getAbsolutePath());
        }
        //结果:
        //file :F:\Java Learning Notes\fileLearn\methodTest1
        //file :F:\Java Learning Notes\fileLearn\methodTest1.txt
        
        for (File listFile : file1.listFiles()) {
            System.out.println("file :" + listFile.getAbsolutePath());
        }
/*        Exception in thread "main" java.lang.NullPointerException
        at file.FildLearn.methodTest5(FildLearn.java:37)
        at file.FildLearn.main(FildLearn.java:25)*/

    }

将子路径和子路径下的文件全部返回。若file不表示一个目录,则会抛出NullPointerException

  1. delete()

删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。 true:当且仅当文件或目录被成功删除时; false相反。

示例代码执行前当前目录:

java模板 ftl 文件_开发语言_11

示例代码如下:

public static void methodTest5() throws Exception {

        String path1 = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1.txt";
        File file1 = new File(path1);
        System.out.println(file1.delete()); //结果 true

    }

示例代码执行后,methodTest1.txt文件被删除。

java模板 ftl 文件_开发语言_12


若传入的时目录:

示例代码如下:

public static void methodTest5() throws Exception {

     
        String path = "F:"+ File.separator +"Java Learning Notes"+File.separator+"fileLearn"+File.separator+"methodTest1";
        File file = new File(path);
        if (!file.exists()){
            System.out.println(file.mkdirs()); // true
        }
        path = path + File.separator+ "methodTest2.txt";
        File file1 = new File(path);
        if (!file1.exists()){
            System.out.println(file1.createNewFile());
        }

        //System.out.println(file.delete()); //false
        //System.out.println(file1.delete()); //true
    }

未执行delete()方法时;

java模板 ftl 文件_开发语言_13


执行delete()方法后:

System.out.println(file.delete()); //false
    System.out.println(file1.delete()); //true

delete只可以删除空路径或文件