Java之File类

来源:互联网 发布:css书籍推荐知乎 编辑:程序博客网 时间:2024/06/01 08:23

1、File类概述

继承体系:public class Fileextends Object implements Serializable, Comparable<File>意义:文件和目录路径名的抽象表示形式。即既可以表示为普通文件,也可以表示为目录 特点:File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。 

2、构造方法与对象创建方式

2.1构造方法

构造方法摘要

File(File parent, String child)           根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 File(String pathname)           通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 File(String parent, String child)           根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 File(URI uri)           通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 

2.2使用示例

    /**     * 几种创建File的方法      */    private static void test4() {        //1 通过路径来创建        File file=new File("D:\\test");        //2 通过父路径与子路径来创建        File file2=new File("D:\\test", "1.c");        //3 通过父文件对象,子路径来创建        File file3=new File(file, "test.txt");        System.out.println(file3.exists());    }

3、功能分类与使用示例

3.1、创建功能

3.11常用方法

创建功能:createNewFile、mkdir、mkdirs 、createTempFile

方法摘要

 boolean createNewFile()           当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 static File createTempFile(String prefix, String suffix)           在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 static File createTempFile(String prefix, String suffix, File directory)            在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。  boolean mkdir()           创建此抽象路径名指定的目录。  boolean mkdirs()           创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 

3.12 使用示例

/**     * 创建功能     *      * @throws IOException     */    private static void test1() throws IOException {        File file = new File("D:\\test\\test.txt");        // 创建文件,成功则返回true,若文件已经存在则不再创建,并返回false        // 注意:要想在某个目录下创建内容,该目录首先必须存在。        boolean createNewFile = file.createNewFile();        System.out.println("createNewFile=" + createNewFile);        File dir = new File("D:\\test\\aaa\\bbb");        // 创建文件夹 如果存在这样的文件夹,就不创建了        boolean mkdir = dir.mkdir(); // 创建目录,但是需注意:父目录必须存在        File dirs = new File("D:\\test\\666\\bbb\\ccc");        boolean mkdirs = dirs.mkdirs(); // 创建多级目录,,返回值表示是否创建成功        System.out.println("mkdir=" + mkdir + " mkdirs=" + mkdirs);        // 创建零时文件,可以指定前后缀,和目录        File.createTempFile("prefix", "suffix.txt", new File("D:\\test"));        // 创建如下文件: prefix4232714334387039759suffix.txt    }

3.2、判断功能与获取功能

3.21常见方法

判断功能:equals、 exists、isAbsolute 、isDirectory、isFile、isHidden、canRead、 canWrite

    boolean canRead()                  测试应用程序是否可以读取此抽象路径名表示的文件。     boolean canWrite()                  测试应用程序是否可以修改此抽象路径名表示的文件。     boolean equals(Object obj)                  测试此抽象路径名与给定对象是否相等。     boolean exists()                  测试此抽象路径名表示的文件或目录是否存在。      boolean isAbsolute()                  测试此抽象路径名是否为绝对路径名。      boolean isDirectory()                  测试此抽象路径名表示的文件是否是一个目录。      boolean isFile()                  测试此抽象路径名表示的文件是否是一个标准文件。      boolean isHidden()                  测试此抽象路径名指定的文件是否是一个隐藏文件。 

获取功能:list() 、listFiles() 、getAbsoluteFile() 、getAbsolutePath() 、getName()、getParent() 、getPath()、getTotalSpace() 、getUsableSpace()

    String[] list()                   返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。     String[] list(FilenameFilter filter)                   返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。     File[] listFiles()                   返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。     File[] listFiles(FileFilter filter)                   返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。    String getName()                   返回由此抽象路径名表示的文件或目录的名称。     String getParent()                   返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。     File getParentFile()                   返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。     String getPath()                   将此抽象路径名转换为一个路径名字符串。     long getTotalSpace()                   返回此抽象路径名指定的分区大小。     long getUsableSpace()                   返回此抽象路径名指定的分区上可用于此虚拟机的字节数。 

3.22 使用示例

/** * 判断功能、获取功能 */private static void test2() {    File file = new File("D:\\test");    // 获取指定文件目录下的所有文件名    // String[] files = file.list();    String[] files = file.list(new FilenameFilter() { // 添加文件过滤器                public boolean accept(File dir, String name) {                    // 返回true则会被添加到文件列表,false则被过滤掉                    return new File(dir, name).isFile()                            && name.endsWith(".txt");                }            });     // 输出文件名    for (String fileName : files) {        System.out.println(fileName);    }    // 判断file是存在的目录,并且不是隐藏的    if (file.exists() && file.isDirectory() && !file.isHidden()) {        // 返回当前目录的文件对象数组        File[] listFiles = file.listFiles();        for (File f : listFiles) {            // 获取文件的绝对路径            // System.out.println(f.getAbsolutePath());             // 获取父目录, 还有getParentFile(返回父目录文件对象)            // System.out.println(f.getParent());            // 文件路径(此抽象路径名的字符串形式) + 文件名            // System.out.println(f.getPath()+"---------- "+f.getName());            // 如果此抽象路径名是绝对路径名,则返回true            // System.out.println(f.isAbsolute());            // 获取磁盘的可用内存,还有其他如 getTotalSpace(总)、getFreeSpace(空闲,未分配的字节数)            // System.out.println(new Formatter().format("可用内存%dG",            // f.getUsableSpace()/1024/1024/1024));            if (f.isFile()) { // 判断是否为正常文件                System.out.println(f.getAbsolutePath());                // f.lastModified() 获取上次修改时间,用SimpleDateFormat进行了格式化                System.out.println("lastModified="                        + new SimpleDateFormat("yyyy-MM-dd HH:ss:mm")                                .format(new Date(f.lastModified())));            }        }    }}

3.3重命名与删除功能:

3.31方法摘要

boolean delete()               删除此抽象路径名表示的文件或目录。 boolean renameTo(File dest)               重新命名此抽象路径名表示的文件。  

3.32 使用示例

1、重命名与删除文件

/**     * 重命名与删除文件功能     */    private static void test3() {        File dir = new File("D:\\test");        File[] listFiles = dir.listFiles();        for (File file : listFiles) {            if (file.getName().equals("1.c")) {                boolean delete = file.delete();                System.out.println("delete=" + delete); // 删除文件,成功则返回true            }            if (file.getName().equals("1.txt")) {                File newFile = new File(file.getParent(), "mystrstr.c");                boolean renameTo = file.renameTo(newFile);                System.out.println("renameTo=" + renameTo); // 重命名文件,成功则返回true            }        }    }

2 、 删除文件夹

注意:若为非空目录,无法直接删除,须将内部文件删除后才能删除该文件夹

/**     * 删除文件夹 删除的文件夹必须为空的,否则必须从内往外删除     */    private static void deleteDir(String dir) {        // 通过dir路径创建file对象        File dirs = new File(dir);        if (!dirs.exists()) return;  // 文件目录不存在则返回        // boolean delete = dirs.delete(); // 删除的文件夹必须为空的,否则必须从内往外删除        File[] listFiles = dirs.listFiles();        for (File file : listFiles) {            if (file.isDirectory() && !file.delete()) { // 如果是目录且不可以被删除(即目录不为空)                    // 如果目录不为空,递归删除                    deleteDir(file.getAbsolutePath());             } else {                file.delete();  // 删除文件            }        }        if(dirs.exists())  dirs.delete(); // 删除空目录    }

4、小案例

扫描文件夹,并对文件进行批量修改文件名
import java.io.File;public class RenameFile {    public static void main(String[] args) {        String dir = "D:\\test\\dir";        renameFile(dir);    }    private static void renameFile(String dir) {        File dirF = new File(dir);        // 得到文件列表        File[] listFiles = dirF.listFiles();        if(listFiles == null) return;        for (File file : listFiles) {            if (file.isDirectory()) {  // 若是目录,则继续遍历                renameFile(file.getAbsolutePath());            }else{                String newFileName=getNewFileName(file.getName());                // 根据路径与新名字创建File对象                File newFile=new File(file.getParent(),newFileName);                file.renameTo(newFile); // 重命名                System.out.println(file.getParent()+"---"+newFileName);            }        }    }    /**     * 获取需要的文件名     * @param name     * @return     */    private static String getNewFileName(String name) {        int startIndex=name.indexOf("-");        return name.substring(startIndex+1);    }}
0 0
原创粉丝点击