在学习I/O流前,我们需要了解一下File类。在Java API文档中,关于File类介绍:
public class File extends Object implements Serializable, Comparable
用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。 这个类提供了一个抽象的,独立于系统的层次化路径名的视图。 抽象路径名有两个组件:
1.可选系统有关的前缀字符串,如磁盘驱动器符, "/"为UNIX根目录,或"\\\\"的Microsoft Windows UNC路径,并
2.零个或多个字符串名称的序列。
抽象路径名中的第一个名称可能是目录名称,或者在Microsoft Windows UNC路径名的情况下是主机名。 抽象路径名中的每个后续名称表示一个目录; 姓氏可以表示目录或文件。 空的抽象路径名没有前缀和空名称序列。
将路径名字符串转换为抽象路径名或从抽象路径名转换本质上是系统依赖的。 当抽象路径名被转换为路径名字符串时,每个名称与默认分隔符的单个副本与下一个名称分隔开 。 默认名称分隔符由系统属性file.separator定义,并且可以在此类的公共静态字段separator和separatorChar中使用。 当路径名字符串转换为抽象路径名时,其中的名称可能由默认名称分隔符或由底层系统支持的任何其他名称 - 分隔符分隔。
无论是抽象还是字符串形式,路径名可以是绝对的或相对的 。 绝对路径名是完整的,因为不需要其他信息来定位其表示的文件。 相对路径名必须根据从其他路径名获取的信息进行解释。 默认情况下, java.io包中的类始终会根据当前用户目录解析相对路径名。 该目录由系统属性user.dir ,通常是调用Java虚拟机的目录。
抽象路径名的父级可以通过调用此类的getParent()方法获得,并由路径名的前缀和路径名的名称序列中的每个名称组成,除了最后一个。 每个目录的绝对路径名是任何File对象的祖先,绝对抽象路径名以目录的绝对路径名开头。 例如,通过将抽象路径名"/usr"表示的目录是由该路径名"/usr/local/bin"表示的目录的祖先。
前缀概念用于处理UNIX平台上的根目录,并在Microsoft Windows平台上驱动说明符,根目录和UNC路径名,如下所示:
---- 对于UNIX平台,绝对路径名的前缀始终为"/" 。 相对路径名没有前缀。 表示根目录的抽象路径名具有前缀"/"和空名称序列。
----对于Microsoft Windows平台,包含驱动器说明符的路径名的前缀由后面跟着":"的驱动器号组成,如果路径名是绝对的,则可能后跟"\\" 。 UNC路径名的前缀为"\\\\" ; 主机名和共享名称是名称序列中的前两个名称。 没有指定驱动器的相对路径名没有前缀。
该类的实例可以表示或不表示实际的文件系统对象,例如文件或目录。 如果它表示这样一个对象,那么该对象驻留在一个分区中 。 分区是文件系统的特定于操作系统的存储部分。 单个存储设备(例如物理磁盘驱动器,闪存,CD-ROM)可能包含多个分区。 该对象(如果有的话)将驻留在该路径名的绝对形式的一些祖先的分区named上。
文件系统可以对实际的文件系统对象上的某些操作实施限制,例如读取,写入和执行。 这些限制统称为访问权限 。 文件系统对单个对象可以具有多组访问权限。
例如,一组可能适用于对象的所有者 ,另一组可能适用于所有其他用户。 对象的访问权限可能会导致此类中的某些方法失败。
该实例File类是不可变的; 也就是说,一旦创建,由File对象表示的抽象路径名永远不会改变。
通过前言可知,File这个类实际上是以一种抽象的形式来表示对文件file、目录dir等路径名称,Java程序把文件或者目录(文件夹)都封装成File对象。如果要操作硬盘上的文件,或者文件夹使用File类即可。File类只关注file文件的属性(文件名称、路径名称、读/写)。
在学习File类前,我们先了解一下该类的静态成员变量和构造方法。
static String |
pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 |
static char |
pathSeparatorChar 与系统相关的路径分隔符。 |
|
separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。 |
static char |
separatorChar 与系统相关的默认名称分隔符。 |
[1]File类的静态成员变量
与系统有关的路径分隔符";",表示目录的分割,已经结束。
public static void run1(){
String separator = File.pathSeparator;
System.out.println(separator);
}
[2]与系统有关的默认名称分隔符"\"
"\"目录的名称分隔符,表示该文件结束。
public static void run2(){
String separator = File.separator;
System.out.println(separator);
}
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 |
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 |
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 |
File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。 |
在开发中,我们常用到其中三种构造方法,
[1]File(String pathName);
参数:路径名,,可以写到文件夹,可以写到一个文件中。如果给定的字符串是空字符串,则结果是空的抽象路径名。
* 例:c:\\abc c:\\abc\\Demo.java
* 将路径封装成File类型的对象
public static void run1(){
//绝对路径
File file = new File("F:\\test");
System.out.println(file);
}
[2]File(String parent,String child)
传递路径,传递字符串父级路径,字符串子路径。
* 绝对路径:在系统中具有唯一性
* 相对路径:表示路径之间的相对关系
* 路径之间,相对于父级目录是唯一性的,而子目录是多个的。
如果parent是null则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数一样。
否则,将使用parent路径名字符串来表示目录,并将child路径名字符串用于表示目录或文件。
如果child路径名字符串是绝对的,那么它将以系统相关的方式转换为相对路径名。
如果parent是空字符串,则通过将child转换为抽象路径名并根据系统相关的默认目录解析结果来创建新的File实例。 否则,每个路径名字符串将转换为抽象路径名,并且子抽象路径名将针对父对象进行解析。
参数
parent - 父路径名字符串
child - 子路径名字符串
public static void run2(){
//相对路径
File file = new File("G:","test");
System.out.println(file);
}
File(String parent,String child)
* 路径分开写
* 可以单独控制父级路径,也可以单独操作子路径
public static void run3(String child){
File file = new File("d:", child);
System.out.println(file);
}
[3]File(File parent,String child)
如果parent是null则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数一样。
否则,采用parent抽象路径名来表示目录,并将child路径名字符串用于表示目录或文件。
如果child路径名字符串是绝对的,那么它将以系统相关的方式转换为相对路径名。
如果parent是空的抽象路径名,那么新的File实例是通过将child转换为抽象路径名并根据系统相关的默认目录解析结果来创建的。 否则,每个路径名字符串将转换为抽象路径名,并且子抽象路径名将针对父对象进行解析。
参数
parent - 父抽象路径名
child - 子路径名字符串
public static void run4(){
File parent = new File("C:");
File child = new File("System32");
System.out.println(parent);
System.out.println(child);
}
[1]File创建文件的功能
* boolean createNewFile()
* 创建的文件路径和文件名,在File构造方法中给出
* 如果创建的文件已经存在,将不再创建。
public static void run1() throws IOException{
//只能创建文件
File file = new File("F:\\Test\\a.txt");
boolean b = file.createNewFile();
System.out.println(b);
}
[2]File创建文件的功能
* boolean mkdir()
* 创建的文件路径和文件名,在File构造方法中给出
* 如果创建的文件夹已经存在,将不再创建。
public static void run2(){
//在指定的路径中创建文件
File file = new File("F:\\Test\\NEW");
boolean b = file.mkdir();
System.out.println(b);
}
[3]File强制删除文件夹或文件的功能
* boolean delete()
* 删除文件路径和文件名,在File构造方法中给出
* 直接删除后,将无法还原,慎用
public static void run3(){
File file = new File("F:\\Test\\a.txt");
boolean b = file.delete();
System.out.println(b);
}
[4]File删除文件夹或文件的功能
* boolean deleteOnExit()
* 删除文件路径和文件名,在File构造方法中给出
* 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
public static void run4(){
File file = new File("F:\\Test\\a.txt");
file.deleteOnExit();
System.out.println(file);
}
[1]File类的获取功能
* String getName()
* 返回由此抽象路径名表示的文件或目录的名称。
public static void run1(){
File file = new File("F:\\Test\\NEW");
String str = file.getName();
System.out.println(str);
String path = file .getParent();
System.out.println(path);
}
[2]File类的获取功能
* long length()
* 返回由此抽象路径名表示的文件的长度(字节数)。
public static void run2(){
File file = new File("F:\\Test\\hello.txt");
long str = file.length();
System.out.println(str);
}
[3]File类的获取功能
* File getAbsoluteFile()
* 返回此抽象路径名的绝对路径名形式。
*
* String getAbsolutePath()
* 返回此抽象路径名的绝对路径名字符串。
public static void run3(){
File file = new File("F:\\Test\\hello.txt");
File str = file.getAbsoluteFile();
System.out.println(str);
String ss = file.getAbsolutePath();
System.out.println(ss);
}
[4]File类的获取功能
* String getParent()
* 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
*
* File getParentFile()
* 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
*
* String getPath();
* 将此抽象路径名转换为一个路径名字符串。
public static void run4(){
File file = new File("F:\\Test\\hello.txt");
File s1 = file.getParentFile();
System.out.println(s1);
String s2 = file.getParent();
System.out.println(s2);
String s3 = file.getPath();
System.out.println(s3);
}
[5]File类的获取方法
* File类list获取方法
* String[] list
* 返回一个抽象路径名数组,也就是包含文件目录和文件目录的抽象路径。
* 遍历目录,通过getName()和getAbsolutePath()来获取名字和路径。
public static void run2(){
File file = new File("c:");
String[] strArr = file.list();
for (String str : strArr) {
System.out.println(str);
}
}
运行结果:
$Recycle.Bin
Config.Msi
Documents and Settings
DRMsoft
hiberfil.sys
Log
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
swapfile.sys
System Volume Information
Temp
Users
Windows
[6]File类的获取方法
* File类listFiles获取方法
* File[]listFiles
* 返回一个抽象路径名数组,也就是包含文件目录和文件目录的抽象路径。,通过getName()和getAbsolutePath()来获取名字和路径;
* 遍历目录
public static void run3(){
File file = new File("F:\\VideoStudy");
File[] strArr = file.listFiles();
for (File str : strArr) {
//1.打印文件的绝对路径,输出结果个
System.out.println(str);
//2.打印文件名称
System.out.println(str.getName());
//3.打印文件的绝对路径,输出结果和1的输出是一样的
System.out.println(str.getAbsolutePath());
}
}
运行结果:
F:\VideoStudy\Java
Java
F:\VideoStudy\Java
F:\VideoStudy\Java框架
Java框架
F:\VideoStudy\Java框架
F:\VideoStudy\JVM调优
JVM调优
F:\VideoStudy\JVM调优
F:\VideoStudy\Linux
Linux
F:\VideoStudy\Linux
F:\VideoStudy\云计算
云计算
F:\VideoStudy\云计算
F:\VideoStudy\分布式
分布式
F:\VideoStudy\分布式
F:\VideoStudy\前端开发
前端开发
F:\VideoStudy\前端开发
F:\VideoStudy\并发编程
并发编程
F:\VideoStudy\并发编程
F:\VideoStudy\微服务
微服务
F:\VideoStudy\微服务
F:\VideoStudy\数据库
数据库
F:\VideoStudy\数据库
F:\VideoStudy\数据结构
数据结构
F:\VideoStudy\数据结构
F:\VideoStudy\消息队列
消息队列
F:\VideoStudy\消息队列
F:\VideoStudy\计算机网络
计算机网络
F:\VideoStudy\计算机网络
[1]File类的判断功能
* boolean isDirectory()
* 测试此抽象路径名表示的文件是否是一个文件夹。
*
* boolean isFile()
* 测试此抽象路径名表示的文件是否是一个标准文件。
*
* boolean exists()
* 测试此抽象路径名表示的文件或目录是否存在。
* 存在,true
* 不存在,false
public static void run1(){
File file = new File("F:\\Test\\hello.txt");
//判断文件/文件夹是否存在
if (file.exists()) {
boolean b = file.isDirectory();
System.out.println(b);
boolean b2 = file.isFile();
System.out.println(b2);
// boolean b3 = file.exists();
// System.out.println(b3);
}
}
愿你就像早晨八九点钟的太阳,活力十足,永远年轻。