File (Java文件类)以抽象的方式来表示文件名和目录路径名。
该类主要用于文件和目录的创建、文件的查找和文件的删除等。
File对象代表磁盘中实际存在的文件和目录。
用户界面和操作系统使用依赖于系统的路径名字符串来命名文件和目录。
此类提供了层次化路径名的抽象、独立于系统的视图。
抽象路径名有两个组件:
1)可选的依赖于系统的前缀字符串,例如磁盘驱动器说明符,“/” 表示UNIX根目录,或“\\\\”表示Microsoft Windows UNC路径名。
2)零个或多个字符串名的序列。
抽象路径名中的第一个名称可以是目录名,如果是Microsoft Windows UNC路径名,则可以是主机名。抽象路径名中的每个后续名称都表示一个目录;最后一个名称可以表示目录或文件。空的抽象路径名没有前缀和空的名称序列。
路径名字符串与抽象路径名之间的转换本质上依赖于系统。将抽象路径名转换为路径名字符串时,每个名称将通过默认分隔符字符的单个副本与下一个名称分隔开。默认名称分隔符由系统属性定义文件.分隔符在这个类的static字段中,和separator是可用的。当路径名字符串转换为抽象路径名时,其中的名称可以用默认名称分隔符字符或由基础系统支持的任何其他名称分隔符字符分隔。
路径名,无论是抽象的还是字符串形式的,可以是绝对的,也可以是相对的。绝对路径名是完整的,因为不需要其他信息来定位它所表示的文件。另一方面,路径名必须以相对的方式来解释。默认情况下java.io文件包始终根据当前用户目录解析相对路径名。此目录由系统属性命名用户目录,通常是调用Java虚拟机的目录。
抽象路径名的父级可以通过调用此类的 getParent() 方法获得,它由路径名的前缀和路径名的名称序列中除最后一个之外的每个名称组成。每个目录的绝对路径名是任何文件对象的祖先,其绝对抽象路径名以目录的绝对路径名开头。例如,抽象路径名“/usr”表示的目录是路径名“/usr/local/bin”表示的目录的祖先。
前缀概念用于处理UNIX平台上的根目录,以及Microsoft Windows平台上的驱动器说明符、根目录和UNC路径名,例如:
1)对于UNIX平台,绝对路径名的前缀始终是“/”。相对路径名没有前缀。表示根目录的抽象路径名具有前缀“/”和空的名称序列。
2)对于Microsoft Windows平台,包含驱动器说明符的路径名的前缀由驱动器号后跟“:”组成,如果路径名是绝对路径名,则可能后跟“\\”。UNC路径名的前缀是“\\\”;主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名没有前缀。
此类的实例可以表示实际的文件系统对象,也可以不表示文件或目录。如果一个对象驻留在这样的分区中,那么它就表示。分区是文件系统存储中操作系统特定的部分。单个存储设备(如物理磁盘驱动器、闪存、CD-ROM)可能包含多个分区。对象(如果有)将驻留在由该路径名绝对形式的某个祖先命名的分区上。
文件系统可以对实际文件系统对象上的某些操作实施限制,例如读取、写入和执行。这些限制统称为访问权限。文件系统可能对单个对象具有多组访问权限。例如,一个集合可以应用于对象的所有者,而另一个集合可以应用于所有其他用户。对对象的访问权限可能会导致此类中的某些方法失败。
File类的实例是不可变的;也就是说,一旦创建,由File对象表示的抽象路径名将永远不会更改。
这个 java.nio.file 文件包定义Java虚拟机访问文件、文件属性和文件系统的接口和类。此API可用于克服 java.io.File class。toPath方法可用于获取使用File对象表示的抽象路径来定位文件的路径。生成的路径可以与Files类一起使用,以提供对其他文件操作、文件属性和I/O异常的更有效和更广泛的访问,以帮助在对文件的操作失败时诊断错误。
public static final char separatorChar:依赖于系统的默认名称分隔符字符。此字段初始化为包含系统属性值的第一个字符文件.分隔符. 在UNIX系统上,此字段的值为“/”;在Microsoft Windows系统上,此字段的值为“\\”。参考:System.getProperty(java.lang.String);
public static final String separator:依赖于系统的默认名称分隔符字符,为方便起见以字符串表示。与 separatorChar 一致
public static final char pathSeparatorChar:依赖于系统的路径分隔符字符。此字段初始化为包含系统属性值的第一个字符路径分隔符. 此字符用于分隔以路径列表形式给定的文件序列中的文件名。在UNIX系统上,此字符为“:”;在Microsoft Windows系统上,此字符为“;”。
public static final String pathSeparator:依赖于系统的路径分隔符字符,为方便起见,用字符串表示。也就是 pathSeparatorChar
public File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的文件实例。如果给定的字符串是空字符串,则结果是空的抽象路径名。
public File(String parent, String child)
通过给定的父路径名字符串和子路径名字符串创建新的文件实例。如果parent为null,则新的文件实例将被创建,就像在给定的子路径名字符串上调用单参数文件构造函数一样。
public File(File parent, String child)
通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。
public File(URI uri)
通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
public static void fileTest() throws IOException {
// 只是一个实例,并未有任何操作
File file = new File("D:" + File.separatorChar + "a" + File.separatorChar + "1.txt");
// 文件或目录是否存在
if(file.exists()){
System.out.println("file 存在");
}
// 创建文件,文件的父目录一定要存在,否则:java.io.IOException: 系统找不到指定的路径
file.createNewFile();
System.out.println("file 内容长度:" + file.length());
file = new File("D:" + File.separatorChar + "a" + File.separatorChar + "b");
// 创建目录,只会创建父目录都存在的最后一层目录
file.mkdir();
file = new File("D:" + File.separatorChar + "b" + File.separatorChar + "c");
// 级联创建目录,一些必要但不存在的父目录,不存在都会创建出来
file.mkdirs();
// 是不是一个标准的文件
if(file.isFile()){
System.out.println("file 是个文件");
}
// 是不是一个目录
if(file.isDirectory()){
System.out.println("file 是个目录");
}
file = new File("D:" + File.separatorChar + "a");
// 目录下的所有文件目录,一定要是目录才行
String[] list = file.list();
for (String f : list) {
System.out.println("d:\\a\\" + f);
}
file = new File("D:" + File.separatorChar + "a" + File.separatorChar + "1.txt");
// 删除文件或目录,文件可直接删除,目录只能删除空目录
file.delete();
file = new File("D:" + File.separatorChar + "b" + File.separatorChar + "c");
file.delete();
}
详细API地址:File (Java Platform SE 8 )
注意:在使用File类的操作的时候,你要很清楚的知道你要操作的这个是文件还是目录,该有的验证一定要有(比如文件夹是否存在)。