第一个名称是 目录名,第一个名称以后每一个名称表示一个目录,最后一个名称既能够是目录,也能够是名称
空 抽象路径名没有前缀和名称序列
|
File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串建立一个新 File 实例。 |
File(String pathname) 经过将给定路径名字符串转换为抽象路径名来建立一个新 File 实例。 |
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串建立一个新 File 实例。 |
File(URI uri) 经过将给定的 file: URI 转换为一个抽象路径名来建立一个新的 File 实例。 |
File file = new File("D:\\testFile");//file就是对这个路径的一个描述,那么是否真的存在? 你还须要进行去验证 |
separatorChar public static final char separatorChar |
与系统有关的默认名称分隔符。
此字段被初始化为包含系统属性 file.separator 值的第一个字符。
在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\\'。
|
separator public static final String separator |
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。此字符串只包含一个字符,即 separatorChar。 |
pathSeparatorChar public static final char pathSeparatorChar |
与系统有关的路径分隔符。 此字段被初始为包含系统属性 path.separator 值的第一个字符。 此字符用于分隔以路径列表 形式给定的文件序列中的文件名。 在 UNIX 系统上,此字段为 ':';在 Microsoft Windows 系统上,它为 ';'。 |
pathSeparator public static final String pathSeparator |
与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
此字符串只包含一个字符,即 pathSeparatorChar。
|
文件自身属性读取 |
getName()
getParent()
getParentFile()
getPath()
isHidden()
lastModified()
length()
isAbsolute()
isDirectory()
isFile()
exists()
getAbsoluteFile()
getAbsolutePath()
getCanonicalFile()
getCanonicalPath()
getFreeSpace()
getTotalSpace()
getUsableSpace()
|
建立文件/目录基本操做
|
mkdir()
mkdirs()
delete()
deleteOnExit()
renameTo(File)
createTempFile(String, String)
createTempFile(String, String, File)
createNewFile()
|
文件/目录 列表读取 |
listRoots()
list()
list(FilenameFilter)
listFiles()
listFiles(FileFilter)
listFiles(FilenameFilter)
|
文件权限访问以及文件信息设置 |
canExecute()
canRead()
canWrite()
setExecutable(boolean)
setExecutable(boolean, boolean)
setReadable(boolean)
setReadable(boolean, boolean)
setReadOnly()
setWritable(boolean)
setWritable(boolean, boolean)
setLastModified(long)
|
其余 |
toPath()
toString()
toURI()
equals(Object)
compareTo(File)
hashCode()
|
public String getName() | 返回由此抽象路径名表示的文件或目录的名称。 该名称是路径名名称序列中的最后一个名称。若是路径名名称序列为空,则返回空字符串。 测试信息: getName(): cccc.txt |
public String getParent() | 返回此抽象路径名父目录的路径名字符串; 若是此路径名没有指定父目录,则返回 null。 getParent(): D:\testFile |
public File getParentFile() | public String getParent() 的File形式,等同于new File(getParent()) |
public String getPath() | 将此抽象路径名转换为一个路径名字符串。 所得字符串使用 默认名称分隔符 分隔名称序列中的名称。 |
public boolean isHidden() | 是否隐藏文件 测试此抽象路径名指定的文件是不是一个隐藏文件。 隐藏 的具体定义与系统有关 |
public long lastModified()
|
long 毫秒数 表示文件最后一次被修改的时间的 long 值, 用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示; 若是该文件不存在,或者发生 I/O 错误,则返回 0L |
public long length() | 长度,字节 返回由此抽象路径名表示的文件的长度。 若是此路径名表示一个目录,则返回值是不肯定的。
此抽象路径名表示的文件的长度,以字节为单位;
若是文件不存在,则返回 0L。
对于表示特定于系统的实体(好比设备或管道)的路径名,某些操做系统可能返回 0L。
|
public boolean isAbsolute() |
是否绝对路径
测试此抽象路径名是否为绝对路径名。绝对路径名的定义与系统有关。
在 UNIX 系统上,若是路径名的前缀是 "/",那么该路径名是绝对路径名。
在 Microsoft Windows 系统上,
若是路径名的前缀是后跟 "\\" 的盘符,或者是 "\\\\",那么该路径名是绝对路径名。
|
public boolean isDirectory() | 当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true;不然返回 false |
public boolean isFile() | 当且仅当此抽象路径名表示的文件存在且 是一个标准文件时,返回 true;不然返回 false |
public boolean exists() | 当且仅当此抽象路径名表示的文件或目录存在时,返回 true;不然返回 false |
public String getAbsolutePath() | 绝对路径名字符串,它与此抽象路径名表示相同的文件或目录 |
public File getAbsoluteFile()
|
绝对 抽象路径名,它与此抽象路径名表示相同的文件或目录 至关于new File(this.getAbsolutePath())
|
public String getCanonicalPath()
throws IOException
|
规范路径名字符串,它与此抽象路径名表示相同的文件或目录
|
public File getCanonicalFile()
throws IOException
|
等同于 new File(this.getCanonicalPath()) |
public long getFreeSpace()
public long getTotalSpace()
public long getUsableSpace()
|
返回此抽象路径名指定的分区中空间相关的数据信息,必定注意是抽象路径名指定的分区 未分配 /所有/已使用 空间状况 单位是字节数 |
mkdir()
|
建立此抽象路径名指定的目录,当且仅当已建立目录时,返回 true;不然返回 false |
mkdirs() | 建立此抽象路径名指定的目录,包括全部必需但不存在的父目录。 注意,此操做失败时也可能已经成功地建立了一部分必需的父目录。 |
public boolean renameTo(File dest) | 从新命名此抽象路径名表示的文件。 参数为File
此方法行为的许多方面都是与平台有关的:重命名操做没法将一个文件从一个文件系统移动到另外一个文件系统,
该操做不是不可分的,若是已经存在具备目标抽象路径名的文件,那么该操做可能没法得到成功。
应该始终检查返回值,以确保重命名操做成功。
|
public boolean delete() | 删除此抽象路径名表示的文件或目录。若是此路径名表示一个目录,则该目录必须为空才能删除。
当且仅当成功删除文件或目录时,返回 true;不然返回 false
|
public void deleteOnExit() |
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
文件(或目录)将以与注册相反的顺序删除。
调用此方法删除已注册为删除的文件或目录无效。
根据 Java 语言规范中的定义,只有在虚拟机正常终止时,才会尝试执行删除操做。
一旦请求了删除操做,就没法取消该请求。因此应当心使用此方法。
|
public static File createTempFile(String prefix,
String suffix,
File directory)
throws IOException
|
在指定目录中建立一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 若是 directory 参数为 null,则使用与系统有关的默认临时文件目录 默认临时文件目录由系统属性 java.io.tmpdir 指定 |
public static File createTempFile(String prefix,
String suffix)
throws IOException
|
在默认临时文件目录中建立一个空文件,使用给定前缀和后缀生成其名称。 调用此方法等同于调用 createTempFile(prefix, suffix, null) |
public boolean createNewFile()
throws IOException
|
当且仅当不存在具备此抽象路径名指定名称的文件时,不可分地建立一个新的空文件。 检查文件是否存在,若不存在则建立该文件 若是指定的文件不存在并成功地建立,则返回 true;若是指定的文件已经存在,则返回 false |
public String[] list() | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
若是此抽象路径名不表示一个目录,那么此方法将返回 null。
不然返回一个字符串数组,每一个数组元素对应目录中的每一个文件或目录。
表示目录自己及其父目录的名称不包括在结果中。每一个字符串是一个文件名,而不是一条完整路径。
|
public String[] list(FilenameFilter filter) | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中知足指定过滤器的文件和目录。 除了返回数组中的字符串必须知足过滤器外,此方法的行为与 list() 方法相同。 若是给定 filter 为 null,则接受全部名称。 |
public File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 若是此抽象路径名不表示一个目录,那么此方法将返回 null。 不然返回一个 File 对象数组,每一个数组元素对应目录中的每一个文件或目录。 表示目录自己及其父目录的名称不包括在结果中。 不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。 |
public File[] listFiles(FilenameFilter filter) | 除了返回数组中的路径名必须知足过滤器外,此方法的行为与 listFiles() 方法相同 若是给定 filter 为 null,则接受全部路径名 |
public File[] listFiles(FileFilter filter) | 除了返回数组中的路径名必须知足过滤器外,此方法的行为与 listFiles() 方法相同。 若是给定 filter 为 null,则接受全部路径名。 |
public static File[] listRoots() |
列出可用的文件系统根。
特定 Java 平台能够支持零个或更多个分层组织的文件系统。
每一个文件系统有一个 root 目录,能够从这里到达文件系统中的全部其余文件。
例如,Windows 平台为每一个活动驱动器提供了一个根目录;
UNIX 平台只有一个根目录,即 "/"。
可用文件系统根的设置受各类系统级操做的影响,好比可移动介质的插入和弹出,以及断开或卸载那些物理磁盘或虚拟磁盘。
此方法返回一个 File 对象数组,这些对象表示可用文件系统根的根目录。
能够保证本地机器上物理存在的任何文件的规范路径名都以此方法返回的根之一开始。
|
public boolean canExecute() | 测试应用程序是否能够执行此抽象路径名表示的文件。 |
public boolean canRead() | 测试应用程序是否能够读取此抽象路径名表示的文件。 |
public boolean canRead() | 测试应用程序是否能够修改此抽象路径名表示的文件。 |
setExecutable(boolean)
setExecutable(boolean, boolean)
|
设置此抽象路径名的全部者或全部用户的执行权限。
executable - 若是为 true,则设置容许执行操做的访问权限;若是为 false,则不容许执行操做。
ownerOnly - 若是为 true,则执行权限只适用于全部者的执行权限;不然适用于全部用户。
若是底层文件系统不能区分全部者执行权限与其余执行权限,那么不管该参数为什么值,执行权限将适用于全部用户。
单参数版本是双参数版本的快捷默认设置形式
file.setExcutable(arg) 形式的调用与如下调用的行为彻底相同:file.setExecutable(arg, true)
也就是单参数默认是设置当前用户
|
setReadable(boolean)
setReadable(boolean, boolean)
|
设置此抽象路径名的全部者或全部用户的读权限。 其他的用法形式同setExecutable |
setWritable(boolean)
setWritable(boolean, boolean)
|
设置此抽象路径名的全部者或全部用户的写权限。
其他的用法形式同setExecutable
|
public boolean setReadOnly() |
标记此抽象路径名指定的文件或目录,从而只能对其进行读操做。
调用此方法后,能够保证在被删除或被标记为容许写访问以前,文件或目录不会发生更改。
是否能够删除某个只读文件或目录则取决于底层系统。
|
public boolean setLastModified(long time) | 设置此抽象路径名指定的文件或目录的最后一次修改时间。 |
public Path toPath() | 返回一个java.nio.file.Path 从这个抽象路径构造的Path对象 1.7新增的 |
public String toString() | 返回此抽象路径名的路径名字符串。该字符串就是 getPath() 方法返回的字符串。
public String toString() {
return getPath();
}
|
public URI toURI() |
构造一个表示此抽象路径名的 file: URI。
该 URI 的具体形式与系统有关。若是能够肯定此抽象路径名表示的文件是一个目录,那么所得 URI 将以斜杠结束。
对于某个给定抽象路径名 f,可保证:
new File( f.toURI()).equals( f.getAbsoluteFile())
|
public int compareTo(File pathname) | 按字母顺序比较两个抽象路径名。此方法定义的顺序取决于底层系统。 在 UNIX 系统上,比较路径名时,字母大小写一般很重要,而在 Microsoft Windows 系统上,这一般不重要。 依赖 |
public boolean equals(Object obj) | 测试此抽象路径名与给定对象是否相等。 当且仅当该参数不是 null,而是一个与此抽象路径名表示相同的文件或目录的抽象路径名时,返回 true。 两个抽象路径名是否相等取决于底层系统。 在 UNIX 系统上,比较路径名时,字母大小写一般很重要,而在 Microsoft Windows 系统上,这一般不重要。 |
public int hashCode() | 计算此抽象路径名的哈希码。 由于抽象路径名的相等性与系统有关,因此对其哈希码的计算也与系统有关。 在 UNIX 系统上,抽象路径名的哈希码等于其路径名字符串和十进制值 1234321 的哈希码的异或。 在 Microsoft Windows 系统上,哈希码等于其转换为小写的路径名字符串和十进制值 1234321 的哈希码的异或。 在将路径名字符串转换为小写时不考虑语言环境。 |
private final char slash;//斜杠符号 private final char altSlash;//与slash相反的斜杠 private final char semicolon;//分号 private static String[] driveDirCache = new String[26];//表示驱动盘目录缓存 private ExpiringCache cache = new ExpiringCache();//用于缓存标准路径 private ExpiringCache prefixCache = new ExpiringCache();//用于缓存标准路径前缀
咱们给出来了一个乱七八糟的路径,最终路径按照当前文件系统的规则,进行了解析,
去除了没必要要的分隔符 或者可能把错误的分隔符进行替换等按照必定的规则
整理出来一个合理的路径,这就是标准化
|
仍是刚才的文件夹列表 此次使用另外的构造方法
File file = new File("D:\\\\\\/testFile///////\\\\","\\///wdwqdwqwd.java"); if (file.exists()){ System.out.println(file.getName()); }
因此能够看得出来resolve作的事情
他要求传递进去的两个字符串都是normal的,因此入参传递进去时,就作了处理
虽说两个都是normal可是两个拼接起来的状况仍是极可能须要处理的,
好比子路径若是以 slash 开头,丢弃它的头部,因此子路径从第2的位置开始
双参数的resolve就是解决这个问题的
一个参数的resolve
public String resolve(File f)
也是相似的道理
只不过他处理的是一个File
|
linux的绝对路径是指从根目录提及的. 例如 /home/somedir/..
而相对路径则是从当前目录提及: 即 ./
|
有4个相对路径的表示方法:
当前目录 .
父目录 ..
某用户的根目录 ~user
本身的根目录 ~
|