File类总结

Posted haixianet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\text.txt" ,此时问题出现了,\t代表的是制表符,所以程序会报错。
    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() + "\t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(x.lastModified())) + "\t" + (x.isDirectory()?"文件夹":"文件") + "\t" + (x.isFile()?(new BigDecimal((double)x.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP) + "M"):"") ;
    System.out.println(str);
    }

以上是关于File类总结的主要内容,如果未能解决你的问题,请参考以下文章

第九周总结&实验报告七

这些 C++ 代码片段有啥作用?

File类总结

File类总结

python常用代码片段总结

BootStrap有用代码片段(持续总结)