• File类总结


    File类总结

    • 所在包:java.io
    • File类直接继承Object类,实现了两个接口 SerializableComparable<File>
    • File类的全局常量:路径分隔符 separator 注意注意注意:全局常量在此处使用了小写字母
    public static final String separator
    
    • 注意:IO部分到处都在抛异常,我们暂时全忽略,主方法上加throws Exception
    • File类最常用的构造函数 public File(String pathname) 举例如下:
    File file = new File("d:" + File.separator + "123" + File.separator + "456.txt") ;
    // 如果要用当前目录的话,就是 "." + File.separator + ......"
    
    • File类其它构造函数(没有无参构造)
    public File(File parent,String child)  // 在andriod开发上使用比较多,比如先取得系统规划的SD卡父目录,然后再加上自己定义的子目录
    public File(String parent,String child)
    public File(URI uri)
    
    • 关于路径的说明:
    public File(String pathname)
    这里的路径参数使用的是String类型的参数,那举例说明:
    1、假设要访问D盘根目录下的text.txt文件,那pathname="d:	ext.txt" ,此时问题出现了,	代表的是制表符,所以程序会报错。
    2、假设要访问D盘根目录下的demo.txt文件,那pathname="d:demo.txt" ,此时没有任何问题。
    3、基于以上两点,为了保险起见,我们需要将转义,即\ .例如:pathname="d:\text.txt" 或 pathname="d:\demo.txt" 都是正确的。
    4、但是,在linux下分隔符是/这样儿的斜线,所以为了统一,就使用到了File类的常量separator 即:pathname="d:" + File.separator + "demo.txt" 
    5、当然,linux下也没有d盘,关于这个问题暂时保留,我后面再研究。
    
    • 创建文件方法:createNewFile() , 返回布尔值 public boolean createNewFile() throws IOException
    File file = new File("d:" + File.separator + "123.txt") ;
    System.out.println(file.createNewFile()) ;
    
    • 删除文件方法:delete() 返回布尔值 public boolean delete()
    File file = new File("d:" + File.separator + "123.txt") ;
    System.out.println(file.createNewFile()) ;
    Thread.sleep(2000) ;
    System.out.println(file.delete()) ;
    
    • 判断文件是否存在的方法 exists() 返回布尔值 public boolean exists()
    File file = new File("d:" + File.separator + "123.txt") ;
    // 如果文件存在,就删除,不存在,就创建
    if (file.exists()) {
    	System.out.println(file.delete()) ;
    } else {
    	System.out.println(file.createNewFile()) ;
    }
    
    • 判断是否是文件 isFile() 返回布尔值 public boolean isFile()
    // 给出的路径目录或文件不存在的话,那就必然会返回false
    File file = new File("d:" + File.separator + "123.txt") ;
    System.out.println(file.isFile()) ;
    
    • 判断是否是文件 isDirectory() 返回布尔值 public boolean isDirectory()
    // 给出的路径目录或文件不存在的话,那就必然会返回false
    File file = new File("d:" + File.separator + "123.txt") ;
    System.out.println(file.isDirectory()) ;
    
    • 得到父目录 getParent() ,返回值 String public String getParent()
    • 得到父目录 getParentFile() ,返回值 File public File getParentFile()
    File file = new File("d:" + File.separator + "123" + File.separator + "456" + File.separator + "789.txt") ;
    String str = file.getParent() ;
    File file2 = file.getParentFile() ;
    System.out.println(str) ;
    System.out.println(file2) ;
    
    因为getParentFile() 返回值 File,而取得File类型对象就可以使用File类的很多方法了,所以工作中取得父目录时大部分是要使用getParentFile()方法的。
    
    • 创建目录方法:mkdir() 返回布尔值 public boolean mkdir()
    • 创建目录方法:mkdirs() 返回布尔值 public boolean mkdirs()
    File file = new File("d:" + File.separator + "123" + File.separator + "456" + File.separator + "789.txt") ;
    if (!file.getParentFile().exists()) file.getParentFile().mkdirs() ;
    if (!file.exists()) file.createNewFile() ;
    
    • 取得文件大小方法:length() 返回值long public long length()
    // 返回结果为原始的long型字节
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("文件大小:" + file.length() + "Byte");
    }
    
    // 字节/1024/1024 得到M
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("文件大小:" + file.length()/1024/1024 + "M");
    }
    
    // 以为因数据类型是long而没有小数,再改造,在第一个long处强制转换为double
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("文件大小:" + (double)file.length()/1024/1024 + "M");
    }
    
    // 以上结果为小数,但小数位数太多,再改造,留两位小数 
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("文件大小:" + new BigDecimal((double)file.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP) + "M");
    }
    
    • 取得最近一次修改时间:lastModified() 返回值long public long lastModified()
    // 返回结果为原始的long型字节
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("最近一次修改时间:" + file.lastModified());
    }
    
    // long 转 Date
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("最近一次修改时间:" + new Date(file.lastModified()));
    }
    
    // 格式化显示Date
    File file = new File("d:" + File.separator + "1.flv") ;
    if (file.isFile()) {
    	System.out.println("最近一次修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
    }
    
    • 可读 canRead() 可写 canWrite() 可执行canExecute()
    canExecute() 方法在linux下才有效,windows下没有此属性,在windows下,大部分情况下canExecute()是返回true
    windows下的这三种属性与安全权限无关,只与文件属性有关,linux 系统下的情况待测。
    
    • 取得文件名 getName() 返回 String public String getName()
    如果路径中仅有盘符,则返回空
    正常则返回最后一个分隔符部分,无论最后一部分是文件还是目录,无论文件存不存在,都会返回其对应的名字
    
    • 取得路径 getPath() 返回 String public String getPath()
    如果路径中仅有盘符,照常返回
    无论最后一部分是文件还是目录,无论文件存不存在,都会返回完整路径,包含文件名(如果有)。
    
    • 列出目录下的目录和文件 list() 返回值 String[] public String[] list()
    • 列出目录下的目录和文件 listFiles() 返回值 File[] public File[] listFiles()
    • 因 listFiles() 方法返回值是File数组,利用File类的很多方法可以继续做很多事情,所以工作中用 listFiles() 的机会很多,用list()方法的情况很少。用list()还有一个非常不好的地方,就是列出来的文件和目录只有名字,没有完整路径,这样儿即使是想增强功能都难了。
    //列出 d 盘下所有的文件和文件夹
    File file = new File("d:" + File.separator) ;
    File[] fileArray = file.listFiles() ;
    for (File x : fileArray) {
    	System.out.println(x) ;
    }
    
    //列出 d 盘下所有的文件和文件夹(包含子目录)
    public static void main(String[] args) {
    	File file = new File("d:" + File.separator) ;
    	if (file.isDirectory() && file.listFiles() != null) print(file) ;
    }
    public static void print(File x) {
    	for (File f : x.listFiles() ) {
    		if (f.isDirectory() && f.listFiles() != null) print(f) ;
    		System.out.println(f) ;
    	}
    }
    

    综合练习(做一个资源管理器)

    • 依次显示 名称 -- 修改日期 -- 类型 -- 大小
    File file = new File("d:" + File.separator) ;
    File[] fileArray = file.listFiles() ;
    for (File x : fileArray) {
    	String str = x.getName() + "	" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(x.lastModified())) + "	" + (x.isDirectory()?"文件夹":"文件") + "	" + (x.isFile()?(new BigDecimal((double)x.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP) + "M"):"") ;
    	System.out.println(str);
    }
    
  • 相关阅读:
    (转)关于IBM小机P520的面板使用
    (转)mysql的sql_mode合理设置
    (转)Mysql技术内幕InnoDB存储引擎-事务&备份&性能调优
    杨辉三角
    异或的陷阱(转)
    通过数组看栈堆
    数组的一些知识点和插入选择冒泡排序
    运算符
    Java的变量相关
    有符号的数据表示法(原、反、补)
  • 原文地址:https://www.cnblogs.com/haixianet/p/8692348.html
Copyright © 2020-2023  润新知