编程语言
首页 > 编程语言> > java常用类库(十)——File

java常用类库(十)——File

作者:互联网

File


来源:java.io.File
文件类,主要是对文件,文件夹的操作。由于不同操作系统不同对应jvm不同,建议使用下面方式使用分隔符,保证跨平台没有问题。

包含常量:

类型字段名描述对应win系统的符号对应unix符号
static Strigseparator名称分隔符\/
static StringpathSeparator路径分隔符

常用构造方法:

构造器描述备注
File(File parent, String child)从父抽象路径和子路径名创建File实例一般:在parent路径下创建child的文件
File(String pathname)给定字符串为路径创建File实例-
File(String pathname, String child)从父路径字符串和子路径字符串创建新的File实例一般:在pathname路径下创建child的文件

常用方法:

关于路径名中的名称分隔符:‘ // ’ (斜杆)or ’ \\ ’ (反斜杠)都可以(系统输出后者)。

区分正反斜杠:正斜杠可以表示除法

返回类型方法名描述备注
booleancreateNewFile()当且仅当文件不存在时创建空文件true:指定文件不存在且成功创建;false:指定文件存在或因操作系统权限不够(读写C盘)抛出异常;解决:用管理员启动IDE或更换盘符
booleandeleteOnExit()虚拟机退出时删除文件/目录-
booleandelete()删除文件或文件夹不会移到回收站,删除文件请谨慎
booleanexists()测试对象的目录或文件是否存在-
StringgetAbsolutePath()得到绝对路径-
StringgetName()获取文件或目录名字-
StringgetPath()路径转换为字符串-
booleanisAbsolute()是否绝对路径-
booleanisDirectory()是否为目录-
booleanisFile()是否为文件-
booleanisHidden()该文件是否为隐藏文件-
longlength()文件长度单位:Byte
String[ ]list()返回字符串数组,内容为该对象下文件和目录就在当前文件所在层的所有文件和文件夹,不跨层
File[ ]listFiles()和上一个方法一样,返回类型为File数组-
File[ ]listFiles(FileFilter filter)返回经过过滤器过滤后的文件和目录过滤器需要实现FileFilter的accept()方法1
booleanmkdir()创建指定目录-
booleanmkdirs()创建指定目录mkdirs()和mkdir()区别2
booleanrenameTo(File dest)将文件更名并移到指定位置类似剪切操作

关于File类的使用

自己测试方法代码:

(我把注释都去掉了,仅供阅读了解方法)

		File f = new File("l://1.txt");
        //创建新文件
        boolean flag = f.createNewFile();
        System.out.println(flag ? "success" : "failed");
        System.out.println(f.getAbsolutePath());
        //删除需谨慎
        f.delete();
        File f2= new File("l://hl");
        f2.mkdir();
        f2.delete();
        File f3 = new File("l://hl/hh/hl");
        f3.mkdirs();
        File f4= new File(f3,"1.txt");
        f4.createNewFile();
        File f5 = new File("l:\\hl","1.txt");
        f5.createNewFile();
        //为空才可以删文件夹
        f3.delete();
        路径分隔符  ;   ,推荐这个写法
        System.out.println(File.pathSeparator);
        //名称分隔符\
        System.out.println(File.separator);
        //rename
        File f6 = new File("l:1.txt");
        File f7 = new File("l:1.txt");
        //将f6制定的文件移动到f7
        f6.renameTo(f7);

关于File过滤器:

package com.hllg.javaBasic.io;

import java.io.File;
import java.io.FileFilter;

/**
 * @author HLLG
 * @version 1.0
 * @create 01/02/2021  16:56
 */
public class FileFilterBasic {
    public static void main(String[] args) {
        //指定初始路径
        File l = new File("l:\\");
        listFiles(l);
    }

    /**
     * 过滤器
     *
     * @param files
     */
    public static void listFiles(File files) {
        FileFilter fileFilter = new JpgFilter();
        File[] file = files.listFiles(fileFilter);
        //下面不做判断,抛出空指针异常
        if (file != null && file.length > 0) {
            for (File f : file) {
                if (f.isDirectory()) {
                    listFiles(f);
                } else {
                    System.out.println("找到了jpg," + f.getAbsolutePath());
                }
            }
        }
    }

    /**
     * 指定过滤规则,需要实现FileFilter接口
     */
    static class JpgFilter implements FileFilter {

        @Override
        public boolean accept(File pathname) {
            if (pathname.getName().endsWith(".jpg") || pathname.isDirectory()) {
                //返回true保留
                return true;
            }
            //返回false过滤掉
            return false;
        }
    }
}

上面可以进行优化,使用匿名对象:

package com.hllg.javaBasic.io;

import java.io.File;
import java.io.FileFilter;

/**
 * @author HLLG
 * @version 1.0
 * @create 01/02/2021  16:56
 */
public class FileFilterAnonymousInsideClass {
    public static void main(String[] args) {
        //指定初始路径
        File l = new File("l:\\");
        listFiles(l);
    }

    /**
     * 过滤器
     *
     * @param files
     */
    public static void listFiles(File files) {
        FileFilter fileFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".jpg") || pathname.isDirectory()) {
                    //返回true保留
                    return true;
                }
                //返回false过滤掉
                return false;
            }
        };
        File[] file = files.listFiles(fileFilter);
        //下面不做判断,抛出空指针异常
        if (file != null && file.length > 0) {
            for (File f : file) {
                if (f.isDirectory()) {
                    listFiles(f);
                } else {
                    System.out.println("找到了jpg," + f.getAbsolutePath());
                }
            }
        }
    }
}

在进行优化,这是常见的方式;

package com.hllg.javaBasic.io;

import java.io.File;
import java.io.FileFilter;

/**
 * @author HLLG
 * @version 1.0
 * @create 01/02/2021  16:56
 */
public class FileFilterAnonymousInsideClassOptimize {
    public static void main(String[] args) {
        //指定初始路径
        File l = new File("l:\\");
        listFiles(l);
    }

    /**
     * 过滤器
     *
     * @param files
     */
    public static void listFiles(File files) {
        File[] file = files.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".jpg") || pathname.isDirectory()) {
                    //返回true保留
                    return true;
                }
                //返回false过滤掉
                return false;
            }
        });
        //下面不做判断,可能会抛出空指针异常
        if (file != null && file.length > 0) {
            for (File f : file) {
                if (f.isDirectory()) {
                    listFiles(f);
                } else {
                    System.out.println("找到了jpg," + f.getAbsolutePath());
                }
            }
        }
    }
}

遍历文件夹中指定类型文件:

package com.hllg.javaBasic.io;

import java.io.File;

/**
 * @author HLLG
 * @version 1.0
 * @create 01/02/2021  16:56
 */
public class ForeachDirectory {
    public static void main(String[] args) {
        //指定初始路径
        File f = new File("l:\\");
        //获取所有文件存入数组
        File[] files = f.listFiles();
        listFiles(files);
    }

    /**
     * 遍历文件夹
     *
     * @param files
     */
    public static void listFiles(File[] files) {
        //不为空且长度不为0
        if (files != null && files.length > 0) {
            for (File f : files) {
                //判断是文件
                if (f.isFile()) {
                    //指定搜索文件类型
                    if (f.getName().endsWith(".jpg")) {
                        //指定文件大小,单位字节,这里是2M
                        if (f.length() > 2 * 1024 * 1024) {
                            //打印文件路径
                            //这里可以加delete(),类似于删除垃圾文件,慎用
                            //f.delete();
                            System.out.println(f.getAbsolutePath());
                        }
                    }
                } else {
                    //文件夹
                    File[] directory = f.listFiles();
                    listFiles(directory);
                }
            }
        }
    }
}

差不多就这些,下次见。
sue
2021-2-12 18:54:23


  1. 过滤器的实现 ↩︎

  2. 例:路径:l:\hl\hh\h , 三个都是文件夹,mkdir()只能创建h,如果之前文件夹不存在创建失败,抛异常,mkdirs()则可以 ↩︎

标签:类库,files,java,文件,listFiles,File,new,public
来源: https://blog.csdn.net/shanheye/article/details/113523908