zoukankan      html  css  js  c++  java
  • File 类

    File 类是 java.io 包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过 File 类来完成。值得指出的是,不管是文件还是目录都是使用 File 来操作的,File 能新建、删除、重命名文件和目录,File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流

    1、访问文件和目录

    File 类可以使用文件路径字符串来创建 File 实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。在默认情况下,系统总是依据用户的工作路径来解释相对路径,这个路径由系统属性“user.dir”指定,通常也就是运行 Java 虚拟机时所在的路径。

    一旦创建了 File 对象后,就可以调用 File 对象的方法来访问,File 类提供了很多方法来操作文件和目录,下面列出一些比较常用的方法。

    1. 访问文件名相关的方法

    • String getName():返回此 File 对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)。
    • String getPath():返回此 File 对象所对应的路径名。
    • File getAbsoluteFile():返回此 File 对象的绝对路径。
    • String getAbsolutePath():返回此 File 对象所对应的绝对路径名。
    • String getParent():返回此 File 对象所对应目录(最后一级子目录)的父目录名。
    • boolean renameTo(File newName):重命名此 File 对象所对应的文件或目录,如果重命名成功,则返回 true:否则返回 false。

    2.文件检测相关的方法

    • boolean exists():判断 File 对象所对应的文件或目录是否存在。
    • boolean canWrite():判断 File 对象所对应的文件和目录是否可写。
    • boolean canRead():判断 File 对象所对应的文件和目录是否可读。
    • boolean isFile():判断 File 对象所对应的是否是文件,而不是目录。
    • boolean isDirectory():判断 File 对象所对应的是否是目录,而不是文件。
    • boolean isAbsolute():判断 File 对象所对应的文件或目录是否是绝对路径。该方法消除了不同平台的差异,可以直接判断 File 对象是否为绝对路径。在 UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线(/),则表明该 File 对象对应一个绝对路径:在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。

    3.获取常规文件信息

    • long lastModified():返回文件的最后修改时间。
    • long length():返回文件内容的长度。

    4.文件操作相关的方法

    • boolean createNewFile():当此 File 对象所对应的文件不存在时,该方法将新建一个该 File 对象所指定的新文件,如果创建成功则返回 true,否则返回 false。
    • boolean delete():删除 File 对象所对应的文件或路径。
    • static File createTempFile(String prefix,String suffix):在默认的临时文件目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过 File 类来调用。prefix 参数必须至少是3字节长。建议前缀使用一个短的、有意义的字符串,比如,"hjb" 或 "mail"。suffix 参数可以为 null,在这种情况下,将使用默认的后缀“.tmp”。
    • static File createTempFile(String prefix,String suffix,File directory):在 directory 所指定的目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过 File 类来调用。
    • void deleteOnExit():注册一个删除钩子,指定当 Java 虚拟机退出时,删除 File 对象所对应的文件和目录。

    5. 目录操作相关的方法

    • boolean mkdir():试图创建一个 File 对象所对应的目录,如果创建成功,则返回 true;否则返回 false,调用该方法时 File 对象必须对应一个路径,而不是一个文件。
    • String[] list():列出 File 对象的所有子文件名和路径名,返回 String 数组。
    • File[] listFiles():列出 File 对象的所有了文件和路径,返回 File 数组。
    • static File[] listRoots():列出系统所有的根路径。这是一个静态方法,可以直接通过 File 类来调用。

    上面详细列出了 File 类的常用方法,下面程序以几个简单方法来测试一下File 类的功能。

    public class FileTest {
        public static void main(String[] args) throws IOException {
            // 以当前路径来创建一个File对象
            File file = new File(".");
            // 直接获取文件名,输出一点
            System.out.println(file.getName());
            // 获取相对路径的父路径可能出错,下面代码输出null
            System.out.println(file.getParent());
            // 获取绝对路径
            System.out.println(file.getAbsoluteFile());
            // 获取上一级路径
            System.out.println(file.getAbsoluteFile().getParent());
            // 在当前路径下创建一个临时文件
            File tmpFile = File.createTempFile("aaa", ".txt", file);
            // 指定当JVM退出时删除该文件
            tmpFile.deleteOnExit();
            // 以系统当前时间作为新文件名来创建新文件
            File newFile = new File(System.currentTimeMillis() + "");
            System.out.println("newFile对象是否存在:" + newFile.exists());
            // 以指定newFile对象来创建一个文件
            newFile.createNewFile();
            // 以newFile对象来创建一个目录,因为newFile已经存在,
            // 所以下面方法返回false,即无法创建该目录
            newFile.mkdir();
            // 使用list()方法来列出当前路径下的所有文件和路径
            String[] fileList = file.list();
            System.out.println("====当前路径下所有文件和路径如下====");
            for (String fileName : fileList) {
                System.out.println(fileName);
            }
            // listRoots()静态方法列出所有的磁盘根路径。
            File[] roots = File.listRoots();
            System.out.println("====系统所有根路径如下====");
            for (File root : roots) {
                System.out.println(root);
            }
        }
    }

    运行上面程序,可以看到程序列出当前路径的所有文件和路径时,列出了程序创建的临时文件,但程序运行结束后,aaa.txt 临时文件并不存在,因为程序指定虚拟机退出时自动删除该文件。

    上面程序还有一点需要注意,当使用相对路径的 File 对象来获取父路径时可能引起错误,因为该方法返回将 File 对象所对应的目录名、文件名里最后一个子目录名、子文件名删除后的结果,如上面程序中的粗体字代码所示。

    注意:Windows 的路径分隔符使用反斜线(),而Java程序中的反斜线表示转义字符,所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线,如 F:\abc\test.txt,或者直接使用(/)也可以,Java 程序支持将斜线当成平台无关的路径分隔符。

    2、文件过滤器

    在 File 类的 list() 方法中可以接收一个参数,通过该参数可以只列出符合条件的文件。

    FilenameFilter 接口里包含了一个 accept(File dir,String name)方法,该方法将依次对指定 File 的所有子目录或者文件进行迭代,如果该方法返回 true,则 list() 方法会列出该子目录或者文件。

    public class FilenameFilterTest {
        public static void main(String[] args) {
            File file = new File(".");
            // 使用Lambda表达式(目标类型为FilenameFilter)实现文件过滤器。
            // 如果文件名以.java结尾,或者文件对应一个路径,返回true
            String[] nameList = file.list((dir, name) -> name.endsWith(".java") || new File(name).isDirectory());
            for (String name : nameList) {
                System.out.println(name);
            }
        }
    }

    上面程序中的粗体字代码部分实现了 accept() 方法,实现 accept() 方法就是指定自己的规则,指定哪些文件应该由 list() 方法列出。

    运行上面程序,将看到当前路径下所有的 *.java 文件以及文件夹被列出。

    提示:FilenameFilter 接口内只有一个抽象方法,因此该接口也是一个函数式接口,可使用 Lambda 表达式创建实现该接口的对象。

  • 相关阅读:
    四则运算出题器
    四则运算出题网页
    四则运算自动生成器实现(python、wxpython、GUI)
    python 实现小学四则运算
    Process and Thread States
    COS AP-开启WPA后无法关联SSID!
    WLC MAC Filtering
    禅道--个人理解 简单介绍
    IDEA解决乱码
    avue 实现自定义列显隐并保存,并且搜索表单、form表单、crud列顺序互不影响。
  • 原文地址:https://www.cnblogs.com/jwen1994/p/12237001.html
Copyright © 2011-2022 走看看