File 文件类对象以及使用方式

详细介绍了Java IO中的文件类File以及使用方式。

1 File对象的概述

public class File
extends Object
implements Serializable, Comparable<File>

IO流不能操作文件的属性、查找、增删等功能,只能操作文件当中内部的数据。

文件的属性:是一些有关文件的描述性信息,未包含在文件的实际内容中,可用来帮助查找和整理文件。例如:文件是否可读可写;a.txt是文件还是目录;a.txt文件是否是隐藏;文件修改日期等都是文件属性

File是文件或文件夹(目录)的抽象表示形式,该类主要用于文件属性操作和目录的创建、文件的查找和文件的删除等。File对象就是代表磁盘中实际存在的文件和目录。

File通常情况和IO流结合使用,因此把File对象称之为IO流的一个辅助对象,File类是IO流的辅助类。

2 静态字段

静态字段(static Field)可以通过类名直接调用。

public static final char separatorChar

与系统有关的名称分隔符。表示为char类型。在UNIX系统上,此字段的值为“/”,在Windows 系统上,它为“\”它的作用主要是利于跨平台。

public static final String separator

系统有关的名称分隔符,为了方便它被表示为一个字符串。

public static final String pathSeparatorChar

与系统有关的路径分隔符。表示为char类型。在 UNIX 系统上,此字段为’:’,在 Microsoft Windows 系统上,它为’; ’。

public static final String pathSeparator

系统有关的路径分隔符,为了方便它被表示为一个字符串。

3 构造器

public File(File parent,String child)

根据parent抽象路径名和child路径名字符串创建一个新 File 实例。完整的文件路径为parent+child:File file3 = new File(“e:\demo”);File file4 = new File(file3, “a.txt”);

public File(String pathname)

通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。如果路径不正确,也不会创建一个属于该路径的文件/目录!

把e:\demo\a.txt封装成一个File对象:File file = new File(“E:\demo\a.txt”);

public File(String parent,String child)

根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。适用于一个父目录下有多个子目录的情况。

File file2 = new File(“E:\demo”, “a.txt”);

注意: 如果使用相对路径,那么是相对当前项目的!

4 API方法

4.1 和创建相关

均返回boolean类型的值。

public boolean createNewFile()

只能用于创建文件。如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,不会创建,并返回false;指定的文件所属的目录不存在,则抛出异常。创建的文件可以不带后缀名。

public boolean mkdir()

只能够用于创建目录,当且仅当已创建目录时,返回 true;否则返回 false,不会创建,不能创建多层目录。

public boolean mkdirs()

具有mkidr方法的属性和功能,并且还能创建多层目录。

注意:

  1. 以上三种方法当任何一种方法在某一目录下创建了文件/目录,其他两种方法便不能在同一目录下创建同名的文件和目录(算上后缀)。
  2. 如果没有指定路径,则相对项目路径!

4.2 和删除相关

返回boolean类型的值

public boolean delete()

删除此抽象路径名表示的文件或目录。当且仅当成功删除文件或目录时,返回 true;否则返回 false。

如果此路径名表示一个目录,则该目录必须为空才能删除(目录里不能有目录或者文件)。

如果文件/目录被其他程序占用,不能删除。

通过Java命令删除的文件或者目录,不经过回收站,直接删除。

deleteOnExit();

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

4.3 和判断相关

返回boolean类型的值

public boolean exists()

测试此抽象路径名表示的文件或目录是否存在。常与createNewFile(创建文件)和mkdir(创建目录)连用。

当且仅当此抽象路径名表示的文件或目录存在时,返回 true;否则返回 false

public boolean isFile()

测试此抽象路径名表示的文件是否存在并且是否是一个标准文件。如果该文件不是一个目录,并且满足其他与系统有关的标准,那么该文件是标准 文件。由Java 应用程序创建的所有非目录文件一定是标准文件。

当且仅当此抽象路径名表示的文件存在且是一个标准文件时,返回 true;否则返回 false

public boolean isDirectory()

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

当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true;否则返回 false

public boolean isAbsolute()

测试此抽象路径名是否为绝对路径名。在 UNIX 系统上,如果路径名的前缀是 “/”,那么该路径名是绝对路径名。在 Microsoft Windows 系统上,如果路径名的前缀是后跟 “\” 的盘符,或者是 “\\”,那么该路径名是绝对路径名。

如果此抽象路径名是绝对路径名,则返回 true;否则返回 false

绝对路径:C:/Users/Mrzhang/javaEE/javaSE-10/javaSE-32/b.txt

相对路径:相对于某个位置

某个文件a路劲为:c:/a/a.txt,b路径为c:/b/b.txt

要求在a.txt的位置,找到b.txt:

  1. 使用绝对路径找到b.txt c:/b/b.txt ;
  2. 相对路径:…/b.txt或者…/…/b/b.txt;

public boolean isHidden()

判断路径名称指定的文件是否是文件隐藏。

public boolean canRead();

判断是否可读

public boolean canWrite();

判断是否可写

public boolean canExecute();

判断是否可执行

4.4 和获得信息相关

public String getName()

获得此抽象路径名的字符串形式名称。

该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。并且不会判断该路径表示的文件/目录是否存在。

public String getPath()

获得此抽象路径名的字符串形式

如果抽象路径是一个绝对路径:getPath();获得是绝对路径。

如果抽象路径指定的是一个相对路径,getPath()获得相对路径。

public String getParent()

获得此抽象路径名的父目录的字符串形式

如果指定的是一个绝对路径:获得父路径,该文件的上一层目录

如果指定的文件是一个相对路径,相对路径没有父目录,返回的是一个null

如果指定的相对路径有父目录, 返回的是父目录。

public String getAbsolutePath()

获得此抽象路径名的绝对路径名字符串。

不管是绝对路径还是抽象路径,得到的都是绝对路径。

public long length()

返回由此抽象路径名表示的文件的长度(字节)。如果此路径名表示一个目录,则返回值是不确定的。

public long lastModified()

获得此抽象路径名表示的文件最后一次被修改的时间。

返回表示文件最后一次被修改的时间的long 值,用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示;如果该文件不存在,或者发生I/O错误,则返回0L

4.5 文件过滤相关

public static File[] listRoots()

列出可用的文件系统根(列出盘符)到数组当中。返回File类型的数组。

public String[] list()

能够将抽象目录下的所有的直接文件和目录的名称都封装到返回的数组当中。返回String类型的数组。

public File[] listFiles()

能够将抽象目录下的所有的直接文件和目录都封装到返回的数组当中。返回一个抽象路径名数组。

public File[] listFiles(FileFilter filter)

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

filter:文件和目录名过滤器。FileFilter 是一个接口类型,KDJ1.2,在使用的时候应该传递一个接口的实现类,可以使用匿名内部类。

public String[] list(FilenameFilter filter)

返回满足过滤器的文件/目录名字的String数组。

public File[] listFiles(FilenameFilter filter)

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

FilenameFilter ,JDK1.0,方法有:boolean accept(File dir,String name),dir:被找到的文件所在的目录。name:文件的名称。

1.1.4.6. 其他方法

返回boolean类型

public boolean renameTo(File dest)

重新命名此抽象路径名表示的文件。如果路径相同就改名,路径不同就相当于剪贴

setReadOnly()

设置文件只读

setWritable(boolean writable)

设置是否可写

……

5 案例

5.1 输出文件名

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

方法1:先获得所有资源,再判断

@Test
public void test1() {
    File file = new File("e:\\");
    File[] files = file.listFiles();
    for (File file1 : files) {
        if (file1.isFile()) {
            if (file1.getName().endsWith(".jpg")) {
                System.out.println(file1.getName());
            }
        }
    }

}

方法2:获得资源的同时进行判断

@Test
public void test2() {
    //使用FileFilter
    File file = new File("e:\\");
    File[] files = file.listFiles(new FileFilter() {
        @Override
        public boolean accept(File file1) {
            return file1.isFile() && file1.getName().endsWith(".jpg");
        }
    });
    for (File file1 : files) {
        System.out.println(file1.getName());
    }
    //使用FilenameFilter
    /*File file = new File("e:\\");
    File[] files = file.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            File file1 = new File(dir, name);
            return file1.isFile() && file1.getName().endsWith(".jpg");
        }
    });
    for (File file1 : files) {
        System.out.println(file1.getName());
    }*/
}

5.2 删除某个目录

window系统删除目录的原理:从里到外进行删除

  1. 递归到目录的最底层。
  2. 先将目录当中存在的文件删除。
  3. 然后删除空目录。
static void delete(String path) {
    File file = new File(path);
    if (file.exists()) {
        if (file.isFile()) {
            file.delete();
            return;
        }
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()) {
                file1.delete();
            } else {
                delete(file1.getPath());
            }
        }
        file.delete();
    }
}

5.3 列举文件清单

列举某个文件夹下面的所有符合规则的文件名到目录到另外一个txt文件中。

/**
 * 列举文件清单
 *
 * @param source 要遍历的目录
 * @param place  文件名输出文件的路径
 */
public static void makeList(String source, String place) {
    ArrayList<String> al = new ArrayList<>();
    File file = new File(source);
    File[] files = file.listFiles();
    assert files != null;
    for (File file1 : files) {
        if (file1.isFile()) {
            al.add(file1.getAbsolutePath());
        } else {
            //递归,遍历出所有文件
            makeList(file1.getAbsolutePath(), place);
        }
    }
    if (al.isEmpty()) {
        return;
    }
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(place, true))) {
        //续写
        for (String s : al) {
            bw.write(s);
            bw.newLine();
            bw.flush();
            System.out.println(s);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值