Java中 File类(文件、目录和文件过滤器)

Java文件类

File类的包名是java.io,其实现了 Serializable,Comparable两大接口以便于其对象可序列化和比较

Java文件类以抽象的方式代表文件名和目录路径名。File类主要用于文件和目录的创建、删除,获取,判断其是否存在,对其进行遍历,文件的查找和文件的删除,其对象可序列化和比较等。只能设置和获取文件本身的信息,不能设置和获取文件的内容。

File对象代表磁盘中实际存在的文件和目录。File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法。

记住这三个单词:file-文件,directory-文件夹/目录,path-路径

File类中提供了两类常量,分别来表示路径分隔符和属性分隔符:

    • static StringpathSeparator

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

      static charpathSeparatorChar

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

      static Stringseparator

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

      static charseparatorChar

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

      路径分隔符与属性分隔符:注意:路径是不区分大小写的

          Unix:使用"/"来分割目录路径,使用 ":" 来分割属性。

          Windows:使用"\"来分割目录路径,使用 ";" 来分割属性。但是在Java中一个"\"表示转义,在Windows平台的Java代码中表示一个路径,就得使用两个"\\"但是Windows也支持"/"。   

    public static void main(String[] args) {
        String pathSeparator = File.pathSeparator;
        char pathSeparatorChar = File.pathSeparatorChar;
        System.out.println(pathSeparator + "==" + pathSeparatorChar); // ;==;
        String separator = File.separator;
        char separatorChar = File.separatorChar;
        System.out.println(separator + "==" + separatorChar); // \==\
        String path = "E:\\java\\file01\\text.txt";
        String path2 = "E:/java/file01/text.txt"; //推荐
        String path3 = "E:" + File.separator + "java" + File.separator + "file01" + File.separator + "text.txt";//官方推荐

    }

构造方法:

    • File(File parent, String child)

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

      File(String pathname)

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

      File(String parent, String child)

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

      File(URI uri)

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

方法操作:

    • booleancanExecute()

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

      booleancanRead()

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

      booleancanWrite()

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

      intcompareTo(File pathname)

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

      booleancreateNewFile()

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

      static FilecreateTempFile(String prefix, String suffix)

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

      static FilecreateTempFile(String prefix, String suffix, File directory)

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

      booleandelete()

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

      voiddeleteOnExit()

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

      booleanequals(Object obj)

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

      booleanexists()

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

      FilegetAbsoluteFile()

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

      StringgetAbsolutePath()

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

      FilegetCanonicalFile()

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

      StringgetCanonicalPath()

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

      longgetFreeSpace()

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

      StringgetName()

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

      StringgetParent()

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

      FilegetParentFile()

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

      StringgetPath()

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

      longgetTotalSpace()

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

      longgetUsableSpace()

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

      inthashCode()

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

      booleanisAbsolute()

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

      booleanisDirectory()

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

      booleanisFile()

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

      booleanisHidden()

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

      longlastModified()

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

      longlength()

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

      String[]list()

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

      String[]list(FilenameFilter filter)

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

      File[]listFiles()

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

      File[]listFiles(FileFilter filter)

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

      File[]listFiles(FilenameFilter filter)

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

      static File[]listRoots()

      列出可用的文件系统根。

      booleanmkdir()

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

      booleanmkdirs()

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

      booleanrenameTo(File dest)

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

      booleansetExecutable(boolean executable)

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

      booleansetExecutable(boolean executable, boolean ownerOnly)

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

      booleansetLastModified(long time)

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

      booleansetReadable(boolean readable)

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

      booleansetReadable(boolean readable, boolean ownerOnly)

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

      booleansetReadOnly()

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

      booleansetWritable(boolean writable)

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

      booleansetWritable(boolean writable, boolean ownerOnly)

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

      PathtoPath()

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

      StringtoString()

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

      URItoURI()

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

// 对方法归一下类,方便记忆处理
1、操作File路径和名称的方法
    File getAbsoluteFile() :获取绝对路径
    String getAbsolutePath():获取绝对路径
    String getPath() :      获取文件路径
    String getName() :      获取文件名称
    File getParentFile():   获取上级目录文件
    String getParent() :    获取上级目录路径
2、检测File状态的方法
    boolean canExecute() : 判断是否是可执行文件
    boolean canRead() :    判断该文件是否可读
    boolean canWrite():    判断该文件是否可写
    boolean isHidden():    判断该文件是否是隐藏文件
    long lastModified():   判断该文件的最后修改时间
    long length():         获取该文件的长度大小(单位字节)
3、操作文件的方法
    boolean isFile() :        是否是文件
    boolean createNewFile() : 创建新的文件
    static File createTempFile(String prefix, String suffix) :创建临时文件
    boolean delete() :        删除文件,注意它直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎,且文件不存在时不抛异常。
    void deleteOnExit() :     在JVM停止时删除文件
    boolean exists():         判断文件是否存在
    boolean renameTo(File dest) :重新修改名称
4、操作目录的方法
    boolean isDirectory() :判断是否是目录
    boolean mkdir()  :     创建当前目录
    boolean mkdirs() :     创建当前目录和上级目录
    String[] list() :      列出所有的文件名
    File[] listFiles() :   列出所有文件对象
    static File[] listRoots() :列出系统盘符

演示常用的方法:

file存在和类型判断:File类的对象可以是目录或者文件。

创建出File类的对象并不代表该路径下有此文件或目录。

  用public boolean exists()可以判断文件是否存在。

  如果是目录,public boolean isDirectory()返回true;

  如果是文件(非目录则是文件),public boolean isFile()返回true;

  注意:先判断文件是否存在,如果文件不存在,上面两个方法都返回false,即不存在的File类对象既不是文件也不是目录

1. 文件

		//绝对路径表示:以盘符起始的路径表示
		//File file = new File("E:\\JavaSE\\file01\\test.txt");
		//相对路径表示:相对于所在工程的根目录
		File file = new File("src/com/jq/file/text.txt");
		
		//测试是否为文件
		boolean flag = file.isFile();
		System.out.println(flag);	//false
		
		if(!file.exists()) {		//文件是否存在
			file.createNewFile();	//文件不存在,则创建该文件
			System.out.println("文件创建成功");
		}
		boolean flag2 = file.isFile();
		System.out.println(flag2);	//true
		
		//获取文件长度length():文件占字节数
		System.out.println(file.length());	//0
		//获取文件路径名 字符串
		System.out.println(file.getPath());	//src\com\jq\file\text.txt
		//获取文件名
		System.out.println(file.getName());//text.txt
		
		//获取该文件父路径名 -- String
		System.out.println(file.getParent());	//src\com\jq\file
		//获取该文件父抽象路径名 -- File
		System.out.println(file.getParentFile()); //src\com\jq\file

2. 目录

		//表示文件
		File file = new File("E:/javaSE/file01/text.txt");
		//表示目录
		File dir = new File("E:/javaSE/file01");
		
		//测试是否为目录
		System.out.println(dir.isDirectory()); //true
		System.out.println(file.isDirectory()); //false
		
		//列出目录下的所有文件 File
		File[] files = dir.listFiles();
		for(File file1: files) {
			System.out.println(file1);
		}
		
		//列出目录中的文件和目录 String
		String[] strs = dir.list();
		for(String str : strs) {
			System.out.println(str);
		}

//结果
true
false
E:\javaSE\file01\a.txt
E:\javaSE\file01\file001
E:\javaSE\file01\text.txt
a.txt
file001
text.txt

2. 遍历磁盘上的所有文件

	public static void main(String[] args) {
		File dir = new File("E:/javaSE");
		showDir(dir);
	}
	
    public static void showDir(File dir) {
        System.out.println(dir);

        //列出目录下的所有文件 File
        File[] fstr = dir.listFiles();
        for(File file : fstr) {
            if(file.isDirectory()){	//是否为目录
                showDir(file);	//递归
            }else{
                System.out.println("\t"+file);
            }
        }
    }

//结果
E:\javaSE
E:\javaSE\file01
	E:\javaSE\file01\a.txt
E:\javaSE\file01\file001
	E:\javaSE\file01\file001\b.txt
	E:\javaSE\file01\text.txt

4. 使用文件过滤器遍历磁盘上指定的文件:

    1)使用 File[] listFiles(FileFilter filter)

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

public class FileTest {
	public static void main(String[] args) {
		//列出指定的文件
		File dir = new File("E:/javaSE/file01");
		File[] files = dir.listFiles(new MyFileFilter());
		for(File file: files) {
			System.out.println(file);
		}
	}	
}

//文件过滤器类
class MyFileFilter implements FileFilter {
    /**
     * 使用 java.io.FilesFilter 接口遍历目录————用于抽象路径名(File对象)的过滤器。
     * @param pathname - 被遍历的目录,得到的是每一个文件对象。
     * @return
     */
    @Override
    public boolean accept(File pathname) {
        // E:\javaSE\file01\a.ppt 等
        boolean b1 = pathname.getName().endsWith(".txt");
        boolean b2 = pathname.getName().endsWith(".ppt");
        return b1 || b2;
    }
}
//结果
E:\javaSE\file01\a.ppt
E:\javaSE\file01\text.txt

   2)使用 File[] listFiles(FilenameFilter filter) ,推荐使用

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

    public static void main(String[] args) {
        //列出指定的文件
        File dir = new File("E:/javaSE/file01");
        File[] files = dir.listFiles(new FilenameFilter(){
            /**
             *  使用 java.io.FilenameFilter 接口遍历目录,
             * @param dir - 被遍历的目录
             * @param name - 使用lisFiles方法遍历目录,获取的每一个文件/文件夹的名称
             * @return
             */
            @Override
            public boolean accept(File dir, String name) {
                // 是文件,并且以这两个后缀结尾的文件过滤,列出
                return new File(dir, name).isFile() && (name.endsWith(".txt") || name.endsWith(".ppt"));
            }
        });
        for(File file: files) {
            System.out.println(file);
        }
    }

注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,并重写过滤的 accept方法,在方法中定义自己的过滤规则。

         

 

  edns ~ 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值