File类简介
类 File 是文件或者目录路径的抽象表述,并非指的是表示文件的字符串。通常情况下来说,操作系统和用户接口使用系统相关的路径表示方式去表示文件或目录,而 File 提供一种系统无关的路径表示方式。一个抽象的路径名包含两部分:
- 可选的系统相关的前缀字符串,如磁盘驱动器说明符,“/”表示UNIX系统的根目录等等。
- 零个或者多个表示名字的字符串序列。
抽象路径名的第一个名字可能是一个目录的名称,也有可能是主机名,抽象路径名中的每一个名称都表示一个目录,而最后一个名称可能表示一个目录,也有可能表示一个文件。
路径名字符串与抽象路径名之间的转换本质上是系统相关的,主要体现在文件分割符。
描述文件的路径名可以是绝对路径或者是相对路径。java.io 包里的所有类都是根据当前用户目录(该目录由系统属性 user.dir 确定,也是 JVM 被调用的目录,即 Java 项目所在根目录,表示相对于整个项目而言的结果)来解析相对路径的。
另外,文件系统可能包含了一些限制,如读、写与执行等限制。这些限制称为访问权限。文件系统可能对单个对象具有多组访问权限。比如,一组访问权限用于对象的持有者,另外一组访问权限用于其他所有用户。对象的访问权限可能导致该类中的个别方法操作失败。
File类的实例是不可改变的,即一旦创建,文件对象的抽象路径名就不会再改变。
与 java.nio.file 包的互操作性:java.nio.file 为 JVM 定义了一些类和接口去访问文件、文件属性和文件系统。这些 API 可以克服 java.io.File 类的不足之处。函数 toPath 可以获得一个 Path 对象,该对象利用 File 对象的抽象路径去定位一个文件。生成的路径可以与 Files 类一起使用,以提供对其他文件操作、文件属性和IO异常的更高效和方法的访问,从而在文件操作失败时帮助诊断错误。
File类总结
字段
File 类拥有4个静态常量字段,分别为 pathSeparator、pathSeparatorChar、separator 和 separatorChar。前两个返回路径分隔符(’;‘或’:’),后两个返回名称分隔符(’/‘或者’\’)。
构造器
File(File parent, String child), File(String pathname), File(String parent, String child)和File(URI uri)
函数
- boolean canExecute() | canWrite() | canRead()指定文件或目录是否可执行、可写与可读。
- int compareTo(File pathname)按照字典顺序比较两个抽象路径名。
- boolean createNewFile()根据抽象路径名自动创建一个空文件,前提条件是指定文件不存在。
- static File createTempFile(String prefix, String suffix) | createTempFile(String prefix, String suffix, File directory)在默认目录或指定directory下创建一个空文件,使用指定的前缀和后缀来生成文件名。
- boolean delete()删除文件或者目录。
- void deleteOnExit()当虚拟机停止工作时,删除指定文件或者目录。
- boolean exists()指定文件或目录是否存在。
- File getAbsoluteFile()获取抽象路径名的绝对形式。
- String getAbsolutePath()获取抽象路径名的绝对路径名。
- File getCanonicalFile()获取抽象路径名的基本形式(规范形式)。
- String getCanonicalPath()获取抽象路径名的规范路径名。
- long getFreeSpace() | getTotalSpace() | getUsableSpace()返回抽象路径名命名的分区中为被分配的字节数,总的字节数以及可用字节数。
- String getName() | getParent()
- File getParentFile()
- String getPath()将抽象路径名转换为路径名字符串并返回。
- boolean isAbsolute() | isDirectory() | isFile() | isHidden()返回该抽象路径名表示的文件是否是绝对形式、目录、文件、隐藏文件。
- long lastModified()返回文件上次被修改的时间。
- long length()返回文件的长度。
- String[] list() | list(FilenameFilter filter)返回(满足指定过滤器)抽象路径名表示的指定目录下的所有文件名和目录名。
- File[] listFiles() | listFiles(FileFilter filter) | listFiles(FilenameFilter filter)返回(满足指定过滤器)抽象路径名表示的指定目录下的所有文件的抽象路径名表示形式。
- static File[] listRoots()返回可用的文件系统的根。
- boolean mkdir() | mkdirs()创建不存在的目录(后者可以创建多级目录,这些目录是必须且不存在的)。
- boolean renameTo(File dest)文件重命名
- boolean setExecutable(boolean executable) | setExecutable(boolean executable, boolean ownerOnly)设置(是否仅仅)所有者对该抽象路径名的执行权限。
- boolean setReadable(boolean readable) | setReadable(boolean readable, boolean ownerOnly)读权限的设置
- boolean setWritable(boolean writable) | setWritable(boolean writable, boolean ownerOnly)写权限的设置
- boolean setLastModified(long time)设置文件/目录上一次被修改的时间。
- boolean setReadOnly()设置只读
- Path toPath()返回一个从抽象路径名构造的 java.nio.file.Path 对象。
- URI toURI()返回一个URI对象来表示该抽象路径名。
示例代码
import java.io.File;
import java.io.IOException;
public class LearnFile {
public static void main(String[] args) {
String currentPath = System.getProperty("user.dir");
String path = currentPath + File.separatorChar + "a" + File.separatorChar
+ "b" + File.separatorChar + "c" + File.separatorChar;
File directory = new File(path);
if (!directory.exists()) {
directory.mkdirs();
}
String filePath = path + "JVM.properties";
File file = new File(filePath);
try {
file.createNewFile();
} catch (IOException ioe) {
}
if (file.exists()) {
file.setReadOnly();
}
System.out.println(file.getAbsolutePath());
}
}
实际应用中,文件路径名之间的分隔符推荐使用 File.separatorChar 或者 File.separator 而非采用绝对的’\‘或者’/'形式,因为很有可能开发是在windows平台上,而服务器使用的Linux系统。同样推荐使用相对路径来表示文件,即相对于项目所在的位置而言,实现跨平台的目的。