美文网首页
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

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

  • 侠说java8-LocalDateTime等时间使用手册(全),

    前言 java8的时间日期api给我们提供了极大的便利。如何更好的熟悉使用时间api也是学习java8的一个很重要...

  • mybatis对java8时间和日期api的支持

    上一篇博客学习了Joda Time项目和java8时间api。 我们知道java8之前的Java.sql.Date...

  • JAVA8中Stream学习

    JAVA8中Stream学习 最近看了下Stream的api: Stream用户操作Collection族的数据,...

  • Date、LocalDate、LocalTime、LocalDa

    java8全新的日期和时间API LocalDate、LocalTime、LocalDateTime是java8对...

  • Java8 使用(上)

    本文主要总结了《Java8实战》,适用于学习 Java8 的同学,也可以作为一个 API 手册文档适用,平时使用时...

  • Java8 使用(下)

    本文主要总结了《Java8实战》,适用于学习 Java8 的同学,也可以作为一个 API 手册文档适用,平时使用时...

  • Java8放弃系列之-1.1-介绍

    推荐、参考资料 参考资料:Java 8 简明教程 中文API:中文API JAVA8 十大新特性详解:JAVA8 ...

  • LocalDateTime用法

    转自:java8 — 新日期时间API篇 前言 最近看别人项目源码,发现Java8新的日期时间API很方便强大,所...

  • 相关的技术网站

    原创技术文章分型网站:果冻想 如何正确的学习JavaScript:JavaScript Java8 API dow...

网友评论

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

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