美文网首页
java8 API学习14 - java.io.File

java8 API学习14 - java.io.File

作者: raBBtt | 来源:发表于2018-06-22 16:28 被阅读0次

    首先吐槽一下这个编辑器, 竟然也会对\\符号转义, 感觉很累
    这个新改版的代码格式也真是难受, 背景色变深色而且注释变成斜体了, 根本看不清啊

    public class File implements Serializable, Comparable<File>
    

    对File这个类有相当长的一段说明文字. 很遗憾我读了好几遍也没能完全明白其中的一些细节说明, 但是根据其分段可以大致明白这个类具有下列特征:

    1. An abstract representation of file and directory pathnames. 这是File类的定义, 说明其代表的是文件或目录名.
    2. File的相对路径和绝对路径区别.
    3. 由于权限设置, File类中的方法在执行时可能出错.
    4. File对象是不可更改的
    5. 和java.nio中io类的区别简述.
      *在下面对方法进行说明时也许会提到上述的具体细节

    File类的常量和静态方法

    我们首先介绍File类的常量和静态方法

    final char pathSeparatorChar //文件分隔标识符, windows上是分号';', unix上是冒号':'
    final String pathSeparator //String类型
    final char separatorChar //路径分隔符, windows是'\\'(转义), unix是'/'
    final String separator //String类型
    
    //在系统的临时目录创建一个空文件, 名称为[prefix]+一串数字.[suffix], 返回该File对象 
    File createTempFile(String prefix, String suffix)
    //在指定目录创建一个空文件
    //虽然以上方法名有"tempFile", 但是创建成功后是不会自动被删除的
    File createTempFile(String prefix, String suffix, File directory)
    //列出所有的根目录, windows下为"C:\, D:\,...", unix下就是"/"
    File[] listRoots()
    

    File的构造方法

    //表示pathname路径对应的File对象
    File(String pathname)
    //这两个构造方法表示在parent目录下名为child的File对象, 但是在构造时并不会检查parent是否为一个目录
    File(String parent, String child)
    File(File parent, String child)
    //代表URI的File对象
    File(URI) 
    

    对于File(String)方法, 其参数取某些特殊值时具有下列含义:

    1. File(null), 无意义, 会抛出异常
    2. File(""), 使用getgetAbsolutePath()方法可以看到其代表相对路径的起始位置, 然而该File对象却不代表这个目录, 在该对象上的目录操作(如列出目录文件)都会抛出异常;当然, 也不代表其中某个文件. 因此可以认为这也是一个无意义的路径.
    3. File("/") 或File("\\"), 代表根目录, 比如在windows上是"C:\"或"D:\", 取决于该.class文件的位置.
      由第3点还可以确认, 在File对象中输入路径时, '/'是可以代替'\\'的.

    File的一般方法

    1.访问权限, 至于windows上执行权限是什么, 和"以管理员身份运行"的关系是什么我也不清楚...

    boolean canExecute()
    boolean canRead()
    boolean canWrite()
    boolean setExecutable(boolean executable)
    boolean setExecutable(boolean executable, boolean ownerOnly)
    boolean setReadable(boolean readable)
    boolean setReadable(boolean readable, boolean ownerOnly)
    boolean setReadOnly() //设为只读, 撤销的话需要使用setWritable(false)方法
    boolean setWritable(boolean writable)
    boolean setWritable(boolean writable, boolean ownerOnly)
    
    1. 文件比较
    //根据文件名的Unicode字符顺序进行比较, 返回值只区分正负, 具体值是未定义的.
    int compareTo(File)
    //判断两个File对象是否代表同一个文件或目录
    boolean equals(Object)
    
    1. 文件操作, 会抛出IOException异常
    boolean createNewFile() //创建空文件, 成功返回true, 文件已存在返回false, 无权限抛出异常
    
    1. 文件或目录操作, 不会抛出异常
    boolean renameTo(File) //重命名, 也可以作为移动文件的方法, 成功返回true, 否则为false
    boolean delete() //删除文件或空目录, 成功返回true, 否则为false
     //程序正常结束时, 删除文件或空目录; 无法知道删除是否成功, 因为程序已经结束了
    void deleteOnExit()
    
    boolean exists()
    
    long lastModified() //返回最后修改时间, 如果出错返回0
    boolean setLastModified(long) //修改"最后修改时间"
    
     /*文件长度(字节), 如果出错返回0, 如果该对象不是文件, 则返回值是未定义的, 如在windows上空文
    件夹返回0, 非空文件夹返回4096*/
    long length()
    
    String[] list() //返回该目录下所有文件和目录名, 如果该对象不是目录, 返回null
    String[] list(FilenameFilter) //*应该是根据文件名进行匹配, 但是具体怎么用呢?
    //和上面类似, 只是返回值为File[]
    File[] listFiles()
    File[] listFiles(FileFilter)
    File[] listFiles(FilenameFilter)
    
    boolean mkdir() /非递归地创建目录, 如果上级目录不存在, 或文件名重复则创建失败
    boolean mkdirs() //递归地创建目录, 如果文件名重复则创建失败
    

    上面提到, 虽然File("").getAbsolutePath()输出的字符串是相对路径的位置, 但是File("")是无意义的; 那么File("").getAbsoluteFile()返回的结果是什么呢? 该结果是存在的, 表示相对路径的目录, 这应该是因为getAbsoluteFile()方法只是通过getAbsolutePath()返回的字符串构造File对象.

    1. 文件名和文件路径
    String getAbsolutePath() //得到文件绝对路径
    File getAbsoluteFile() //等价于new File(this.getAbsolutePath())
    
     /*得到文件实际路径的唯一表示, 和getAbsolutePath的区别在于, 前一方法会保留原始字符, 
    如'./', '../', 甚至是非法字符(?, *等), 而该方法会先在文件系统中查找, 即消去'.'和'..', 遇到非法
    字符时会抛出异常*/
    String getCanonicalPath()
    File getCanonicalFile() //等价于new File(this.getCanonicalPath())
    
    String getName() //文件名, 不带路径
    
    //返回文件所在目录名; 该方法和输入值有关, 如果输入中就没有目录, 则返回null
    String getParent() 
    /*通常等价于new File(this.getParent()); 如果this.getParent()为null, 则该方法也返回null, 
    *虽然文档原话不是这么说的但是应该差不多吧*/
    File getParentFile() 
    
    String getPath() //原样返回你当初构造File对象时输入的那个pathname(或parent/pathname)
    
    boolean isAbsolute() //判断当时输入的是相对路径还是绝对路径
    

    7.文件类型和属性查询

    boolean isDirectory() //当该对象为目录是返回true, 如果不是目录或不存在返回false, 下同
    boolean isFile()
    boolean isHidden()
    
    1. 该对象所在的磁盘空间查询
     /*返回磁盘剩余空间, *如果你发现其数值和"我的电脑"显示的不一致, 那是因为java程序运行
    时产生了临时文件, 请在程序最后一行加上Thread.sleep(999999);*/
    long getFreeSpace()
    long getTotalSpace() //磁盘总空间
    long getUsableSpace() //磁盘已使用空间
    
    1. 类型转换
    Path toPath()
    URI toURI()
    

    总结

    1. File类中只有static createTempFile, createNewFile, getCanonicalPathgetCanonicalFile4个方法会抛出IOException异常, 其余大多数方法都是通过返回值来判断操作是否成功;
    2. 关于开头提到的File类的那5条基本说明做一下总结: 第2条没有展开详细说明, 请参考其他人的文章...第3条就是总结1说的, 大部分通过返回值判断, 部分抛出异常; 第5条么...等以后也许会写到java.nio.File吧.

    相关文章

      网友评论

          本文标题:java8 API学习14 - java.io.File

          本文链接:https://www.haomeiwen.com/subject/jjdajftx.html