File类

File类

描述

java.io.File 类是文件和目录路径名的抽象表示。
* 1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
* 2. File类声明在java.io包下
* 3. File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,
*    并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。
* 4. 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点"

路径分类

  • 相对路径:相较于某个路径下,指明的路径。
  • 绝对路径:包含盘符在内的文件或文件目录的路径
  • 说明:
    IDEA中:
    如果大家开发使用JUnit中的单元测试方法测试,相对路径即为当前Module下。
    如果大家使用main()测试,相对路径即为当前的Project下。
    Eclipse中:
    不管使用单元测试方法还是使用main()测试,相对路径都是当前的Project下。

常用方法

构造方法

File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。 
    参数;
    	String parent;父路径
    	String child;子路径
    好处;
    	父路径子路径,可以单独写
    	父路径是File类型,可以使用file类中那个的方法对路径进行一些操作
File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 
    参数;
    	string pathname;字符串的路径名称
    	路径可以是文件结尾,也可以是文件夹结尾
    	路径可以是相对路径/绝对路径,也可以是不存在/存在
    	file对象只是把字符串路径封装成file类对象,不考虑路径的真实情况
File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。  
File​(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。  

字段汇总

static String pathSeparator 与系统相关的分隔符字符,为方便起见,表示为字符串。 
    windows为;  Linux为:
static char pathSeparatorChar 与系统相关的路径分隔符。

static String separator 与系统相关的默认名称的路径分隔符字符,以方便的方式表示为字符串。 
    window和dos系统为反斜杠   Linux和url为正斜杠 /
static char separatorChar 与系统相关的默认名称分隔符。

成员方法

//获取功能--------------------------------------------------------
public String getAbsolutePath(); 获取绝对路径.
    //存在不存在无所谓.
public String getPath(); 获取构造方法中传递的路径.
    //在源码当中toString调用的就是getPath();
public String getName(); 获取文件或者文件的名称.
    //获取的是构造方法中传递的结尾部分(文件还是文件夹).
public String getParent(); 获取上层文件目录路径。若无返回null.
public long length(); 返回此file表示的'文件'的长度(即:字节数)。不能获取目录长度,如果不存在输出0.
public long lastModified(); 获取最后一次的修改时间,毫秒值.
//判断功能----------------------------------------------------------
public boolean exists(); 判断file表示的文件或者文件夹是否实际存在
public boolean isDirectory();判断file表示的'文件夹'是否存在
    判断构造方中给定的路径是否是文件
public boolean isFile(); 判断此file是否是'文件'
    用于判断构造方法中给定的路径是否以文件结尾
    	true/false
    注意/电脑的硬盘中只有文件和文件夹,两个方法是互斥的
    这两个方法使用的前提是;路径必须是存在的,否则都返回false
public boolean canRead(); 判断是否可读
public boolean canWrite(); 判读是可写
public boolean isHidden(); 判断是否隐藏
//创建文件------------------------------------------------------------
public boolean createNewFile();创建文件。若文件的存在,就不创建,返回false,否则就创建并返回true。
    1.此方法不能创建文件价,只能创建文件
    2.创建的路径必须存在,否则就抛出异常。IOException
public boolean mkdir();创建文件目录。如果此文件目录存在,就不创建。如果此文件目录的上层目录不存在,也不创建。-->创建单级文件夹
public boolean mkdirs();创建文件目录。如果上层文件目录不存在一并创建。-->创建单/多级文件夹
    //注意;如果你创建问价或者文件目录没有写盘符路径,那么,默认在项目路径下。
//删除----------------------------------------------------------------
public boolean delete(); 删除文件或者文件夹
    //删除注意事项
    //删除可以是相对路径或者绝对路径
    //java中的删除不走回收站
    //要删除一个文件目录,请注意文件目录不能包含文件或者文件夹目录
	//要删除的文件则不注意文件是否有内容
//目录遍历-------------------------------------------------------------
public String[] list(); 返回一个String数组,表示该file目录中的所有的子目录或者子文件
    根据构造方法中的目录存储到一个String类型的数组中
public File[] listFiles; 返回file数组,表示该list目录中的所有子目录或者子文件
    注意事项;
    	list方法和listFiles方法遍历的是构造方法指定的目录。
    	如果构造方法中给出的目录的路径不存在,会抛出空指针
    	如果构造方法中给出的目录不是一个目录,也会抛出空指针
static File[] listRoots​() 列出可用的文件系统根。
File[] listFiles​(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。  
File[] listFiles​(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。  

//重命名----------------------------------------------------------------
public boolean renameTo(File dest);把文件重命名位置的文件路径
//设置-------------------------------------------------------------------
boolean setExecutable​(boolean executable) 为此抽象路径名设置所有者的执行权限的便利方法。  
boolean setExecutable​(boolean executable, boolean ownerOnly) 设置该抽象路径名的所有者或每个人的执行权限。  
boolean setLastModified​(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。 

练习

  • 文件搜索 遍历所欲的.txt文件,目录搜索,无法判断有多少级目录,所以使用递归遍历目录
    public static void searchTxt(File dir) {
    	File[] files = dir.listFiles();
    	for (File f : files) {
    		if (f.isDirectory()) {
    			searchTxt(f);
    		} else {
    			String name = f.getName();
    			//windows文件时忽略大小写的
    			name = name.toLowerCase();//大写转换小写
    			if (name.endsWith(".txt")) {//如果末尾是那就输出
    				System.out.println(f);
    			}
    		}
    	}
    }
    
  • 使用递归打印多级内存目录
    public static void method3(File file) {
        //首先获取到直接子目录和直接子文件
        File[] files = file.listFiles();
        //遍历
        for (File f : files) {
            //判断如果得到的是一个目录需要再次遍历
            if (f.isDirectory()) {
                //表明f是一个目录,则继续遍历这个目录
                //method3这个方法就是获取所有的文件,
                //参数传递的刚好就是目录,直接调用就可以了
                method3(f);
            } else {
                //此时f不是一个目录,肯定是一个文件
                System.out.println(f);
            }
    
        }
    }
    

推荐
文件过滤器
io流

原文地址:https://www.cnblogs.com/zk2020/p/14127105.html