javaIO流-File类详解

一、File概述

    

    IO流是用来操作数据的,而文件是保存数据最常用的数据媒体,因此在应用程序中会经常对硬盘上的文件进行一些操作,比如创建一个文件,删除或者重命名某个文件,判断硬盘上某个文件是否存在,查询文件最后修改时间等等,针对这类操作,JDK定义了一个可以管理文件和目录的File类。

    从定义看,File类是Object的直接子类,同时它继承了Comparable接口可以进行数组的排序。File类的操作包括文件的创建、删除、重命名、得到路径、创建时间等,以下是文件操作常用的函数。

二、File源码解析

  • File构造方法

private File(String var1, int var2) {
    this.path = var1;
    this.prefixLength = var2;
}

private File(String var1, File var2) {
    assert var2.path != null;
    assert !var2.path.equals("");

    this.path = fs.resolve(var2.path, var1);
    this.prefixLength = var2.prefixLength;
}
//通过指定的一个字符串类型的文件路径来创建一个新的File对象 
public File(String var1) {
    if (var1 == null) {
        throw new NullPointerException();
    } else {
        this.path = fs.normalize(var1);
        this.prefixLength = fs.prefixLength(this.path);
    }
}

//根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
public File(String var1, String var2) {
        if (var2 == null) {
            throw new NullPointerException();
        } else {
            if (var1 != null) {
                if (var1.equals("")) {
                    this.path = fs.resolve(fs.getDefaultParent(), fs.normalize(var2));
                } else {
                    this.path = fs.resolve(fs.normalize(var1), fs.normalize(var2));
                }
            } else {
                this.path = fs.normalize(var2);
            }

            this.prefixLength = fs.prefixLength(this.path);
        }
}
//根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象 
public File(File var1, String var2) {
    if (var2 == null) {
        throw new NullPointerException();
    } else {
        if (var1 != null) {
            if (var1.path.equals("")) {
                this.path = fs.resolve(fs.getDefaultParent(), fs.normalize(var2));
            } else {
                this.path = fs.resolve(var1.path, fs.normalize(var2));
            }
        } else {
            this.path = fs.normalize(var2);
        }
        this.prefixLength = fs.prefixLength(this.path);
    }
}

public File(URI var1) {
    if (!var1.isAbsolute()) {
        throw new IllegalArgumentException("URI is not absolute");
    } else if (var1.isOpaque()) {
        throw new IllegalArgumentException("URI is not hierarchical");
    } else {
        String var2 = var1.getScheme();
        if (var2 != null && var2.equalsIgnoreCase("file")) {
            if (var1.getAuthority() != null) {
                throw new IllegalArgumentException("URI has an authority component");
            } else if (var1.getFragment() != null) {
                throw new IllegalArgumentException("URI has a fragment component");
            } else if (var1.getQuery() != null) {
                throw new IllegalArgumentException("URI has a query component");
            } else {
                String var3 = var1.getPath();
                if (var3.equals("")) {
                    throw new IllegalArgumentException("URI path component is empty");
                } else {
                    var3 = fs.fromURIPath(var3);
                    if (separatorChar != '/') {
                        var3 = var3.replace('/', separatorChar);
                    }
                    this.path = fs.normalize(var3);
                    this.prefixLength = fs.prefixLength(this.path);
                }
            }
        } else {
            throw new IllegalArgumentException("URI scheme is not \"file\"");
        }
    }
}
  • File类常用方法
//判断File对象对应的文件或目录是否存在,若存在返回ture,反之返回
public boolean exists() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    if (this.isInvalid()) {
        return false;
    } else {
        return (fs.getBooleanAttributes(this) & 1) != 0;
    }
}
//删除File对象对应的文件或目录,若成功删除则返回true,,否则返回false。 
public boolean delete() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkDelete(this.path);
    }

    return this.isInvalid() ? false : fs.delete(this);
}
//当File对象对应的文件不存在时,该方法将新建一个此File对象所指定的新文件,若创建成功则返回true,否则返回false
public boolean createNewFile() throws IOException {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkWrite(this.path);
    }

    if (this.isInvalid()) {
        throw new IOException("Invalid file path");
    } else {
        return fs.createFileExclusively(this.path);
    }
}
//返回File对象表示的文件名或者目录名(如果是目录,返回最后一级目录名) 
public String getName() {
    int var1 = this.path.lastIndexOf(separatorChar);
    return var1 < this.prefixLength ? this.path.substring(this.prefixLength) : this.path.substring(var1 + 1);
}
//返回File对象对应的路径  
public String getPath() {
    return this.path;
}
//返回File对象对应的绝对路径(在Unix/Linux等系统上,如果路径是以正斜线(/)开始,,则这个路径是绝对路径;在Windows等系统上,如果路径是以从盘符开始,则这个路径是绝对路径) 
public String getAbsolutePath() {
    return fs.resolve(this);
}
//返回File对象对应目录的父目录(即返回的目录不包含最后一级子目录)
public String getParent() {
    int var1 = this.path.lastIndexOf(separatorChar);
    if (var1 < this.prefixLength) {
        return this.prefixLength > 0 && this.path.length() > this.prefixLength ? this.path.substring(0, this.prefixLength) : null;
    } else {
        return this.path.substring(0, var1);
    }
}
//判断File对象对应的文件或目录是否可读,若可读则返回true,反之返回false
public boolean canRead() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    return this.isInvalid() ? false : fs.checkAccess(this, 4);
}
//判断File对象对应的文件或目录是否可写,若可写则返回true,反之返回false
public boolean canWrite() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkWrite(this.path);
    }
    return this.isInvalid() ? false : fs.checkAccess(this, 2);
}
//判断File对象对应的是否是文件(不是目录),若是文件则返回true,反之返回false  
public boolean isFile() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    if (this.isInvalid()) {
        return false;
    } else {
        return (fs.getBooleanAttributes(this) & 2) != 0;
    }
}
//判断File对象对应的是否是目录(不是文件),若是目录则返回true,反之返回false
public boolean isDirectory() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    if (this.isInvalid()) {
        return false;
    } else {
        return (fs.getBooleanAttributes(this) & 4) != 0;
    }
}
//判断File对象对应的文件或目录是否是绝对路径  
public boolean isAbsolute() {
    return this.scheme != null;
}
//返回1970年1月1日0时0分0秒到文件最后修改时间的毫秒值;
public long lastModified() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    return this.isInvalid() ? 0L : fs.getLastModifiedTime(this);
}
//返回文件内容的长度  
public long length() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    return this.isInvalid() ? 0L : fs.getLength(this);
}
//列出指定目录的全部内容,只是列出了名称
public String[] list() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkRead(this.path);
    }

    return this.isInvalid() ? null : fs.list(this);
}
//返回一个包含了File对象所有子文件和子目录的File数组
public File[] listFiles() {
    String[] var1 = this.list();
    if (var1 == null) {
        return null;
    } else {
        int var2 = var1.length;
        File[] var3 = new File[var2];

        for(int var4 = 0; var4 < var2; ++var4) {
            var3[var4] = new File(var1[var4], this);
        }

        return var3;
    }
}
//为已有的文件重新命名
public boolean renameTo(File var1) {
    SecurityManager var2 = System.getSecurityManager();
    if (var2 != null) {
        var2.checkWrite(this.path);
        var2.checkWrite(var1.path);
    }

    if (var1 == null) {
        throw new NullPointerException();
    } else {
        return !this.isInvalid() && !var1.isInvalid() ? fs.rename(this, var1) : false;
    }
}
//创建一个目录
public boolean mkdir() {
    SecurityManager var1 = System.getSecurityManager();
    if (var1 != null) {
        var1.checkWrite(this.path);
    }

    return this.isInvalid() ? false : fs.createDirectory(this);
}

三、实例

package com.fileIO;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

public class fileIOtest1 {
    public static void main(String[] args) throws IOException {
        /**
         * 创建
         */
        //创建目录
        File file = new File("src\\demo");
        System.out.println("创建目录:"+file.mkdir());
        //创建aa文件
        File file1 = new File("src\\demo\\dd.txt");
        System.out.println("创建文件:"+file1.createNewFile());
        //重命名aa文件为bb文件
        File file2 = new File("src\\demo\\cc.txt");
        System.out.println("重命名:"+file1.renameTo(file2));
        /**
         * 删除
         */
        System.out.println("删除目录或文件:"+file2.delete());
        /**
         * 判断功能
         */
        //判断是否是目录
        System.out.println("判断是否是目录:"+file1.isDirectory());
        //判断是否是文件
        System.out.println("判断是否是文件:"+file1.isFile());
        //判断是否存在
        System.out.println("判断是否存在:"+file1.exists());
        //判断是否可读
        System.out.println("判断是否可读:"+file1.canRead());
        //判断是否可写
        System.out.println("判断是否可写:"+file1.canWrite());
        //判断是否隐藏
        System.out.println("判断是否隐藏:"+file1.isHidden());
        /**
         * 基本获取功能
         */
        //获取绝对路径
        System.out.println("获取绝对路径:" + file1.getAbsolutePath());
        //获取相对路径
        System.out.println("获取相对路径:" + file1.getPath());
        //获取名称
        System.out.println("获取名称:" + file1.getName());
        //获取长度
        System.out.println("获取长度:" + file1.length());
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        //获取最后一次的修改时间
        System.out.println("获取最后一次的修改时间:" + sdf.format(file1.lastModified()));
        /**
         * 高级获取功能
         */
        //获取指定目录下的所有文件或者文件夹的名称数组
        File file3 = new File("c:\\");
        String[] list = file3.list();
        for (String aa :list) {
            System.out.println(aa);
        }
        //获取指定目录下的所有文件或者文件夹的File数组
        File[] files = file3.listFiles();
        for (File bb : files) {
            System.out.println(bb.getName());
        }
    }
}

 

转载于:https://my.oschina.net/Clarences/blog/1601227

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值