JavaSE-22-File类对象 过滤器 FilenameFilter

本文深入讲解Java中的File类,涵盖其基本用法、构造方法、常用API如创建、删除、重命名文件,以及获取文件属性如最后修改时间和系统根目录等。同时,探讨了目录操作、过滤器使用和系统资源获取的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

File类

字段分隔符:separator

 常用方法:

2.创建&删除

 3.判断

4.重命名

5.系统根目录和容量获取  实际开发中会用到。

 6.过滤隐藏文件;


 

Java文件类File 用来将文件或者路径封装对象(可以是已经存在或者不存在),方便对文件与文件夹属性操作,File 可以作为参数传递给流的构造函数。

File类

  File  f1= new File(" c:\\a.txt");// 一个参数

File f2= new File("c:\\","a.txt");// 两个参数

Fille  f3 =new File(" c:\\");//路径

File  f4= new File(f3,"a.txt");

FileReader(File file) 创建一个新的 FileReader ,给出 File读取。

字段分隔符:separator

 

 

public   static   void  separator(){

 System.out.println("E:"+File.separatorChar+"abc"+System.getProperty("file.separator")+"test.txt");//E:\abc\test.txt
 System.out.println("E:"+File.separator+" test2.txt");//  E\ test2.txt
 System.out.println("E:\\test3.txt"+File.pathSeparator+"E:\\test4.txt");//E:\test3.txt;E:\test4.txt
}

pathSeparator 代表不同路径的分隔符:系统环境变量里:

 常用方法:

  1. 获取

获取文件最后修改时间;lastModified()

public  static   void   file_function(){

    File  file =new  File("a.txt");
    String name =file.getName();// 文件名称
    System.out.println(name);
    String   absoluteepath= file.getAbsolutePath();//绝对路径
    System.out.println(absoluteepath);
    String   path=  file.getPath();//相对路径
    long    len =   file.length();//文件长度
    long   time = file.lastModified();//最后修改时间: 开一个线程每三秒监视一次文件,可以用于文件一但被修改就读取文件数据。
    Date date = new Date(time);
    DateFormat  dateFormat =DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
    String  str_time = dateFormat.format(date);
    System.out.println(str_time);
    System.out.println(file.getParent());//父目录
}

2.创建&删除

 文件:

 

    • booleancreateNewFile()     

      true如果命名文件不存在并被成功创建; false如果命名文件已经存在

      和输出流不一样。输出流不管文件存不存在都会创建。

                                         

 

    • booleandelete()

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

    • voiddeleteOnExit()

      请求在虚拟机终止时删除由此抽象路径名表示的文件或目录,一旦请求删除,就无法取消请求。 因此,该方法应谨慎使用。

  例如  file.createNewFile创建 ---io流操作时候抛出异常了,---deleOnExit()

 目录:

  目录为空的时候才能删除

File dir=  new File("abc");
 System.out.println("目录是否存在"+dir.exists());
 System.out.println("目录路径"+dir.getAbsolutePath());//目录路径E:\java\20190420_1\abc
 ret=   dir.mkdirs();//创建文件夹
 System.out.println("目录创建:"+ret );
 // dir.delete()  路径删除

 File   file1 =new File("abc"+File.separatorChar+"test.txt");
 file1.createNewFile();
 ret= dir.delete();
 System.out.println("删除路径:"+ret);//false    因为abc 路径下还有文件 所以删除失败!!!!!

 

 多级目录创建删除问题:

 //创建多级目录
 File  dirs= new File("abcd\\a\\b\\c");
 ret= dirs.mkdirs();
 System.out.println(" 删除多级目录+"+dirs.delete());//  此时 dirs 是c,abcd\a\b是父路径,只会删除c 

 3.判断

先判断  文件是否存在   exists   再判断   isFiles()   ,isDirectory(),否则 文件不存在时候 isFiles()   ,isDirectory() 返回 false

4.重命名

 同一路径下 会改名,不同路径下会改名并且剪切。
File  file =new File("t20190605.txt");
File  file2 = new File(" 哈哈哈.txt");
  file.renameTo(file2);

不同路径下:

File file =new File("t20190605.txt");

File file2 = new File(" abc\\哈哈哈.txt"); file.renameTo(file2);

5.系统根目录和容量获取  实际开发中会用到。

 

 

 

 6.获取盘符  空闲空间   已用空间

  练习 获取本机最大空闲盘符: 

7.获取目录下内容     

lIst  当前目录下所有文件和文件夹名称  包括隐藏文件,封装 的是必须是目录,如果 File  file_names =new File("c:\\test.txt"); 是文件不是目录回报String[] 为空  ,NUllPointExeption,如果是访问系统目录 也会空指针异常。如果目录存在但是会返回 String[] ,长度为0.

File  file_names =new File("c:\\");

for(String   file_name :  file_names){

System.out.println(file_name);

}

过滤器:重载方法  该过滤器只能过滤文件名称。

 过滤器的原理:

源码:

public String[] list(FilenameFilter var1) {
        String[] var2 = this.list();
        if (var2 != null && var1 != null) {
            ArrayList var3 = new ArrayList();

            for(int var4 = 0; var4 < var2.length; ++var4) {
                if (var1.accept(this, var2[var4])) {
                    var3.add(var2[var4]);
                }
            }

            return (String[])var3.toArray(new String[var3.size()]);
        } else {
            return var2;
        }
    }

demo  过滤文件后缀为“.java”的文件

import java.io.File;
import java.io.FilenameFilter;

public class MyFileNameFilter   implements FilenameFilter {
    @Override
    public boolean accept(File file, String s) {
        System.out.println(" file  by  java "+s);
        return   s.endsWith(".java");
    }
}

  /***
     *  文件名称过滤器
     */
    public  static  void  fileNameFilter(){

        File  dir =new File("E:\\java\\20190420_1\\src");
      String[]   file_names=         dir.list( new MyFileNameFilter());
        for(String filename:  file_names){
            System.out.println(" filename:"+filename);
        }
    }

 过滤隐藏文件;

 

判断文件是否是隐藏的: isHidden()

 

package day22;

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

  public class MyHiddenFIleFilter  implements FileFilter {
      @Override
      public boolean accept(File file) {
          return file.isHidden();//是隐藏文件
      }
  }




/***
     *  文件名称过滤器
     */
    public  static  void  fileNameFilter(){

        File  dir =new File("E:\\java\\20190420_1\\src");
      String[]   file_names=         dir.list( new MyFileNameFilter(".java"));
        for(String filename:  file_names){
            System.out.println(" filename:"+filename);
        }
        //获取隐藏文件
        File  dir2 =new File("C:\\");
        File[]  files =dir2.listFiles(new MyHiddenFIleFilter());
        for(File  file: files){
            System.out.println(" "+file.getName()+" isHidden ="+file.isHidden());
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值