首先吐槽一下这个编辑器, 竟然也会对\\符号转义, 感觉很累
这个新改版的代码格式也真是难受, 背景色变深色而且注释变成斜体了, 根本看不清啊
public class File implements Serializable, Comparable<File>
对File这个类有相当长的一段说明文字. 很遗憾我读了好几遍也没能完全明白其中的一些细节说明, 但是根据其分段可以大致明白这个类具有下列特征:
- An abstract representation of file and directory pathnames. 这是File类的定义, 说明其代表的是文件或目录名.
- File的相对路径和绝对路径区别.
- 由于权限设置, File类中的方法在执行时可能出错.
- File对象是不可更改的
- 和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)方法, 其参数取某些特殊值时具有下列含义:
- File(null), 无意义, 会抛出异常
- File(""), 使用
getgetAbsolutePath()
方法可以看到其代表相对路径的起始位置, 然而该File对象却不代表这个目录, 在该对象上的目录操作(如列出目录文件)都会抛出异常;当然, 也不代表其中某个文件. 因此可以认为这也是一个无意义的路径. - 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)
- 文件比较
//根据文件名的Unicode字符顺序进行比较, 返回值只区分正负, 具体值是未定义的.
int compareTo(File)
//判断两个File对象是否代表同一个文件或目录
boolean equals(Object)
- 文件操作, 会抛出IOException异常
boolean createNewFile() //创建空文件, 成功返回true, 文件已存在返回false, 无权限抛出异常
- 文件或目录操作, 不会抛出异常
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对象.
- 文件名和文件路径
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()
- 该对象所在的磁盘空间查询
/*返回磁盘剩余空间, *如果你发现其数值和"我的电脑"显示的不一致, 那是因为java程序运行
时产生了临时文件, 请在程序最后一行加上Thread.sleep(999999);*/
long getFreeSpace()
long getTotalSpace() //磁盘总空间
long getUsableSpace() //磁盘已使用空间
- 类型转换
Path toPath()
URI toURI()
总结
- File类中只有
static createTempFile
,createNewFile
,getCanonicalPath
和getCanonicalFile
4个方法会抛出IOException
异常, 其余大多数方法都是通过返回值来判断操作是否成功; - 关于开头提到的File类的那5条基本说明做一下总结: 第2条没有展开详细说明, 请参考其他人的文章...第3条就是总结1说的, 大部分通过返回值判断, 部分抛出异常; 第5条么...等以后也许会写到
java.nio.File
吧.
网友评论