目录
File(File parent, String child)
File(String parent,String child)
public boolean createNewFile()
public boolean renameTo(File dest)
public String getAbsolutePath()
Class File
查看API文档我们知道:
public class File extends Object implements Serializable, Comparable<File>文件和目录路径名的抽象表示。
用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。 这个类提供了一个抽象的,独立于系统的层次化路径名的视图。 抽象路径名有两个组件:
抽象路径名中的第一个名称可能是目录名称,或者在Microsoft Windows UNC路径名的情况下是主机名。 抽象路径名中的每个后续名称表示一个目录; 姓氏可以表示目录或文件。 空的抽象路径名没有前缀和空名称序列。
将路径名字符串转换为抽象路径名或从抽象路径名转换本质上是系统依赖的。 当抽象路径名被转换为路径名字符串时,每个名称与默认分隔符的单个副本与下一个名称分隔开 。 默认名称分隔符由系统属性
file.separator
定义,并且可以在此类的公共静态字段separator
和separatorChar
中使用。 当路径名字符串转换为抽象路径名时,其中的名称可能由默认名称分隔符或由底层系统支持的任何其他名称 - 分隔符分隔。无论是抽象还是字符串形式,路径名可以是绝对的或相对的 。 绝对路径名是完整的,因为不需要其他信息来定位其表示的文件。 相对路径名必须根据从其他路径名获取的信息进行解释。 默认情况下,
java.io
包中的类始终会根据当前用户目录解析相对路径名。 该目录由系统属性user.dir
,通常是调用Java虚拟机的目录。抽象路径名的父级可以通过调用此类的getParent()方法获得,并由路径名的前缀和路径名的名称序列中的每个名称组成,除了最后一个。 每个目录的绝对路径名是任何File对象的祖先,绝对抽象路径名以目录的绝对路径名开头。 例如,通过将抽象路径名"/usr"表示的目录是由该路径名"/usr/local/bin"表示的目录的祖先。
前缀概念用于处理UNIX平台上的根目录,并在Microsoft Windows平台上驱动说明符,根目录和UNC路径名,如下所示:
该类的实例可以表示或不表示实际的文件系统对象,例如文件或目录。 如果它表示这样一个对象,那么该对象驻留在一个分区中 。 分区是文件系统的特定于操作系统的存储部分。 单个存储设备(例如物理磁盘驱动器,闪存,CD-ROM)可能包含多个分区。 该对象(如果有的话)将驻留在该路径名的绝对形式的一些祖先的分区named上。
文件系统可以对实际的文件系统对象上的某些操作实施限制,例如读取,写入和执行。 这些限制统称为访问权限 。 文件系统对单个对象可以具有多组访问权限。 例如,一组可能适用于对象的所有者 ,另一组可能适用于所有其他用户。 对象的访问权限可能会导致此类中的某些方法失败。
该实例
File
类是不可变的; 也就是说,一旦创建,由File
对象表示的抽象路径名永远不会改变。
- 可选系统有关的前缀字符串,如磁盘驱动器符,
"/"
为UNIX根目录,或"\\\\"
的Microsoft Windows UNC路径,并- 零个或多个字符串名称的序列。
- 对于UNIX平台,绝对路径名的前缀始终为
"/"
。 相对路径名没有前缀。 表示根目录的抽象路径名具有前缀"/"
和空名称序列。- 对于Microsoft Windows平台,包含驱动器说明符的路径名的前缀由后面跟着
":"
的驱动器号组成,如果路径名是绝对的,则可能后跟"\\"
。 UNC路径名的前缀为"\\\\"
; 主机名和共享名称是名称序列中的前两个名称。 没有指定驱动器的相对路径名没有前缀。
通过观察API文档我们知道:想要实现 IO 的操作,就必须知道硬盘上的文件表现形式,java中用一个类来供我们使用,抽象的表示硬盘上的各种文件这个叫做File。
File
文件和目录路径名的抽象表示,今后我们所说的目录就是文件夹的意思。
File类的构造方法
File(File parent, String child)
从父抽象路径和子路径名字符串创建新的File实例
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File(String parent,String child)
从父路径名字符串和子路径名字符串创建新的File实例
创建File对象的原因
对想要进行操作的文件或者文件夹,将其封装成一个File对象,然后调用该对象中的方法对文件或者文件夹进行操作
参考代码:
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
//将E:\代码26\demo目录封装成一个File对象
File file = new File("E:\\代码26\\demo");
System.out.println(file);
System.out.println("\n***********************\n");
//根据一个目录和一个子文件得到一个File对象
File file1 = new File(file, "靓仔.txt");
System.out.println(file1);
System.out.println("\n***********************\n");
//File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的 File实例
File file2 = new File("E:\\代码26\\demo", "靓仔.txt");
System.out.println(file2);
}
}
输出结果:
E:\代码26\demo
***********************
E:\代码26\demo\靓仔.txt
***********************
E:\代码26\demo\靓仔.txt
File类的创建功能
public boolean createNewFile()
查看API文档我们知道:
throws IOException
当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 检查文件的存在和文件的创建(如果不存在)是对可能影响文件的所有其他文件系统活动是单一的操作。
注意:此方法不应用于文件锁定,因为生成的协议不能使其可靠地工作。 应该使用FileLock设施。
结果
true
如果命名文件不存在并被成功创建;false
如果命名文件已经存在异常
IOException
- 如果发生I / O错误
SecurityException
- 如果存在安全管理员,并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对该文件的写入访问
public boolean mkdir()
查看API文档我们知道:
public boolean mkdir()创建由此抽象路径名命名的目录。
结果
true
当且仅当该目录被创建时;false
否则异常
SecurityException
- 如果存在安全管理员,并且其SecurityManager.checkWrite(java.lang.String)
方法不允许创建命名目录
public boolean mkdirs()
查看API文档我们知道:
public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 请注意,如果此操作失败,它可能已成功创建一些必需的父目录。
结果
true
当且仅当该目录已创建,以及所有必需的父目录;false
否则异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkRead(java.lang.String)
方法不允许验证命名目录和所有必需的父目录的存在; 或者如果SecurityManager.checkWrite(java.lang.String)
方法不允许创建命名目录和所有必需的父目录
参考代码1:
import java.io.File;
import java.io.IOException;
public class FileDemo2 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\zookeeper.txt");
//public boolean createNewFile()
boolean newFile = false;
try {
newFile = file.createNewFile();
} catch (IOException e) {
//如果我们想要创建的文件,没有指定的multi,就会报错
//IOException:系统找不到指定的路径
e.printStackTrace();
}
//如果指定文件已经存在,返回false
System.out.println(newFile);
//public boolean mkdir()
//在指定目录下创建文件夹
//E:\代码26\demo\下创建一个zookeeper文件夹
//如果该文件夹已经存在,就不会创建了,返回false
File file1 = new File("E:\\代码26\\demo\\zookeeper");
boolean mkdir = file1.mkdir();
//public boolean mkdirs()
//创建多级文件夹
//E:\代码26\demo\hadoop\master.txt
File file2 = new File("E:\\代码26\\demo\\hadoop\\hadoop1.txt");
boolean mkdirs = file2.mkdirs();
}
}
注意观察!
运行前:
运行后:
我们打开hadoop文件夹看看是否创建了hadoop.txt文本文件
这是为什么呢?我们进行以下处理:注意我们使用的是mkdirs()方法,所创建的也就是文件夹
参考代码2:
import java.io.File;
import java.io.IOException;
public class FileDemo2 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\zookeeper.txt");
//public boolean createNewFile()
boolean newFile = false;
try {
newFile = file.createNewFile();
} catch (IOException e) {
//如果我们想要创建的文件,没有指定的multi,就会报错
//IOException:系统找不到指定的路径
e.printStackTrace();
}
//如果指定文件已经存在,返回false
System.out.println(newFile);
//public boolean mkdir()
//在指定目录下创建文件夹
//E:\代码26\demo\下创建一个zookeeper文件夹
//如果该文件夹已经存在,就不会创建了,返回false
File file1 = new File("E:\\代码26\\demo\\zookeeper");
boolean mkdir = file1.mkdir();
//public boolean mkdirs()
//创建多级文件夹
//E:\代码26\demo\hadoop\master.txt
File file2 = new File("E:\\代码26\\demo\\hadoop\\hadoop1.txt");
// boolean mkdirs = file2.mkdirs();
//今后开发的时候,要搞清楚你是要文件夹还是创建文件,创建文件的时候需要添加后缀名
boolean newFile1 = false;
try {
boolean newFile2 = file2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(newFile1);
//同一个目录下,文件夹和文件的名字不能重复
}
}
我们再来运行一遍:
false
false
由于hadoop和zookeeper我们先前已经创建过了,所以返回值是false
(想要创建的文件夹已存在,不会创建,返回false)
File类的删除功能
public boolean delete()
查看API文档我们知道:
public boolean delete()删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。
请注意, Files类定义了一个delete方法,当一个文件不能被删除时,它会抛出一个IOException 。 这对于错误报告和诊断文件无法被删除的原因很有用。
结果
true
当且仅当文件或目录被成功删除时;false
否则异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkDelete(java.lang.String)
方法拒绝对该文件的删除访问
参考代码1:
import java.io.File;
public class FileDemo3 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\hadoop\\hadoop1.txt");
boolean delete = file.delete();
System.out.println(delete);
}
}
输出结果:
true
想要删除的文件存在返回true
我们再执行一遍:
false
想要删除的文件不存在返回false
注意观察!
接下来我们尝试删除文件夹hadoop
参考代码2:
import java.io.File;
public class FileDemo3 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\hadoop\\hadoop1.txt");
boolean delete = file.delete();
System.out.println(delete);
//要想删除一个文件,这个文件夹里面的内容必须是空的
File file1 = new File("E:\\代码26\\demo\\hadoop");
boolean delete1 = file1.delete();
System.out.println(delete1);
}
}
输出结果:
false
false
通过运行结果我们发现,hadoop文件夹是非空的,以后我们会做如何删除多级文件夹。
那么我们删除一下zookeeper文件夹
参考代码:
import java.io.File;
public class FileDemo3 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\hadoop\\hadoop1.txt");
boolean delete = file.delete();
System.out.println(delete);
//要想删除一个文件,这个文件夹里面的内容必须是空的
File file1 = new File("E:\\代码26\\demo\\zookeeper");
boolean delete1 = file1.delete();
System.out.println(delete1);
}
}
输出结果:
false
true
File类的重命名功能
public boolean renameTo(File dest)
查看API文档我们知道:
public boolean renameTo(File dest)重命名由此抽象路径名表示的文件。
该方法的行为的许多方面固有地依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件可能无法成功已经存在。 应始终检查返回值,以确保重命名操作成功。
请注意, Files类定义了以独立于平台的方式移动或重命名文件的
move
方法。参数
dest
- 命名文件的新抽象路径名结果
true
当且仅当重命名成功;false
否则异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对旧的或新的路径名的写入访问
NullPointerException
- 如果参数dest
是null
现在想把hadoop.txt改成------->helloworld 参考代码:
import java.io.File;
public class FileDemo4 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\hadoop\\hadoop.txt");
//public boolean renameTo(File dest)
//现在想把hadoop.txt改成------->helloworld
boolean b = file.renameTo(new File("E:\\代码26\\demo\\hadoop\\helloworld"));
System.out.println(b);
}
}
输出结果:
true
注意观察!
File类的判断功能
public boolean isDirectory()
查看API文档我们知道:
public boolean isDirectory()测试此抽象路径名表示的文件是否为目录。
在需要区分I / O异常和文件不是目录的情况下,或同时需要同一文件的几个属性的情况下,可以使用Files.readAttributes方法。
结果
true
当且仅当该抽象路径名表示的文件存在且为目录时;false
否则异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对该文件的读取访问
public boolean isFile()
查看API文档我们知道:
public boolean isFile()测试此抽象路径名表示的文件是否为普通文件。 如果文件不是目录,并且另外满足其他依赖于系统的条件,文件是正常的 。 Java应用程序创建的任何非目录文件都保证是一个普通文件。
在需要区分I / O异常与文件不是正常文件的情况下,或同时需要同一文件的几个属性的情况下,可以使用Files.readAttributes方法。
结果
true
当且仅当该抽象路径名表示的文件存在且为普通文件时;false
否则异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对该文件的读取访问
public boolean exists()
查看API文档我们知道:
public boolean exists()测试此抽象路径名表示的文件或目录是否存在。
结果
true
当且仅当存在由此抽象路径名表示的文件或目录时;false
否则异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件或目录的读取访问
public boolean canRead()
查看API文档我们知道:
public boolean canRead()测试应用程序是否可以读取由此抽象路径名表示的文件。 在某些平台上,可以使用特殊权限启动Java虚拟机,以允许它读取标记为不可读的文件。 因此,这个方法可能返回
true
即使该文件不具有读取权限。结果
true
当且仅当此抽象路径名指定的文件存在并可由应用程序读取时;false
否则异常
SecurityException
- 如果存在安全管理员,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对该文件的读取访问
public boolean canWrite()
查看API文档我们知道:
public boolean canWrite()测试应用程序是否可以修改由此抽象路径名表示的文件。 在某些平台上,可能会启动具有特殊权限的Java虚拟机,以允许它修改标记为只读的文件。 因此,即使文件被标记为只读,该方法也可能返回
true
。结果
true
当且仅当文件系统实际上包含由该抽象路径名表示的文件并且允许应用程序写入该文件时;false
否则。异常
SecurityException
- 如果存在安全管理员,并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对该文件的写访问
public boolean isHidden()
查看API文档我们知道:
测试此抽象路径名命名的文件是否为隐藏文件。 隐藏的确切定义是依赖于系统的。 在UNIX系统上,如果文件的名称以句点字符(
'.'
)开头,则该文件被视为隐藏。 在Microsoft Windows系统上,如果文件在文件系统中被标记为这样,则文件被认为是隐藏的。结果
true
当且仅当该抽象路径名表示的文件根据底层平台的约定被隐藏时异常
SecurityException
- 如果安全管理器存在,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
参考代码:
import java.io.File;
public class FileDemo5 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\代码26\\demo\\金克斯.jpg");
//public boolean isDirectory()
//判断是否是一个目录
System.out.println("判断是否是一个目录:" + file.isDirectory());
//public boolean isFile()
//判断是否是一个文件
System.out.println("判断是否是一个文件:" + file.isFile());
//public boolean exists()
//判断是否存在
System.out.println("判断是否存在:" + file.exists());
//public boolean canRead()
//判断是否可读
System.out.println("判断是否可读:" + file.canRead());
//public boolean canWrite()
//判断是否可写
System.out.println("判断是否可写:" + file.canWrite());
//public boolean isHidden()
//判断是否隐藏
System.out.println("判断是否隐藏:" + file.isHidden());
}
}
输出结果:
判断是否是一个目录:false
判断是否是一个文件:true
判断是否存在:true
判断是否可读:true
判断是否可写:true
判断是否隐藏:false
File类的基本获取功能
public String getAbsolutePath()
查看API文档我们知道:
返回此抽象路径名的绝对路径名字符串。
如果这个抽象路径名已经是绝对的,那么路径名字符串就像
getPath()
方法一样简单地返回。 如果此抽象路径名为空抽象路径名,则返回由系统属性user.dir
命名的当前用户目录的路径名字符串。 否则,该路径名以系统相关的方式解决。 在UNIX系统上,通过将相对路径名解析为当前用户目录,使其成为绝对路径。 在Microsoft Windows系统上,相对路径名是绝对的,通过将其与由路径名命名的驱动器的当前目录(如果有的话)解决; 如果没有,则针对当前用户目录进行解析。结果
绝对路径名字符串表示与此抽象路径名相同的文件或目录
异常
SecurityException
- 如果无法访问所需的系统属性值。
public String getPath()
查看API文档我们知道:
public String getPath()将此抽象路径名转换为路径名字符串。 结果字符串使用default name-separator character以名称顺序分隔名称。
结果
这个抽象路径名的字符串形式
public String getName()
查看API文档我们知道:
public String getName()返回由此抽象路径名表示的文件或目录的名称。 这只是路径名称序列中的最后一个名字。 如果路径名的名称序列为空,则返回空字符串。
结果
由此抽象路径名表示的文件或目录的名称,如果此路径名的名称序列为空,则为空字符串
public long length()
查看API文档我们知道:
public long length()返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。
其中要求区分该情况下的I / O异常
0L
其中相同文件的多个属性是必需的,同时被返回,或者,那么Files.readAttributes可以使用方法。结果
由此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,
0L
。 某些操作系统可能会返回0L
用于表示系统依赖实体(如设备或管道)的路径名。异常
SecurityException
- 如果存在安全管理员,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
public long lastModified()
查看API文档我们知道:
public long lastModified()
返回此抽象路径名表示的文件上次修改的时间。
凡需要从那里的情况下区分I / O异常
0L
返回,或者在同一时间都需要在同一文件的多个属性,或者在需要的上次访问或创建时间的时间,那么可以使用Files.readAttributes方法。结果
long
值表示上次修改文件的时间,以时间为单位(1970年1月1日00:00:00 GMT)测量,或者如果文件不存在0L
,或者如果发生I / O错误异常
SecurityException
- 如果存在安全管理员,并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
参考代码:
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDemo6 {
public static void main(String[] args) {
File file = new File("E:\\代码26\\demo\\靓仔.txt");
//public String getAbsolutePath()
System.out.println(file.getAbsolutePath());
//public String getPath()
System.out.println(file.getPath());
//public String getName()
//获取名称
//com.shujia.wyh.day27.FileDemo6
System.out.println(file.getName());
//public long length()
//获取字节大小
File file1 = new File("E:\\代码26\\demo\\靓仔.txt");
System.out.println(file1.length());
//public long lastModified()
//最后一次修改的时间
//返回的是时间戳,精确到了毫秒
File file2 = new File("E:\\代码26\\demo\\靓仔.txt");
//1640395546537
System.out.println(file2.lastModified());
//1640397590639
//时间戳与日期的转换
//public Date(long date)
Date date = new Date(file2.lastModified());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(date);
System.out.println(s);
}
}
输出结果:
E:\代码26\demo\靓仔.txt
E:\代码26\demo\靓仔.txt
靓仔.txt
21
1640520533603
2021-12-26 20:08:53
File类的高级获取功能
public String[] list()
查看API文档我们知道:
public String[] list()返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
如果此抽象路径名不表示目录,则此方法返回
null
。 否则返回一个字符串数组,一个用于目录中的每个文件或目录。 表示目录本身和目录的父目录的名称不包括在结果中。 每个字符串都是一个文件名,而不是完整的路径。不保证结果数组中的名称字符串将以任何特定的顺序出现; 他们不是特别保证按字母顺序出现。
请注意, Files类定义了newDirectoryStream方法来打开目录并遍历目录中文件的名称。 在使用非常大的目录时,这可能会减少资源,并且在使用远程目录时可能会更加灵活。
结果
一组字符串,命名由此抽象路径名表示的目录中的文件和目录。 如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回
null
。异常
SecurityException
- 如果安全管理器存在,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
public File[] listFiles()
查看API文档我们知道:
public File[] listFiles()返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
如果此抽象路径名不表示目录,则此方法返回
null
。 否则将返回一个File
对象的数组,一个用于目录中的每个文件或目录。 表示目录本身和目录的父目录的路径名不包括在结果中。 每个生成的抽象路径名由使用File(File, String)构造函数的抽象路径名构造。 因此,如果这个路径名是绝对的,那么每个生成的路径名是绝对的; 如果此路径名是相对的,那么每个生成的路径名将相对于相同的目录。不保证结果数组中的名称字符串将以任何特定的顺序出现; 他们不是特别保证按字母顺序出现。
请注意, Files类定义了newDirectoryStream方法来打开目录并遍历目录中文件的名称。 当使用非常大的目录时,这可能会减少资源。
结果
一组抽象路径名,表示由此抽象路径名表示的目录中的文件和目录。 如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回
null
。异常
SecurityException
- 如果存在安全管理员,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
参考代码:
import java.io.File;
public class FileDemo7 {
public static void main(String[] args) {
File file = new File("E:\\代码26\\demo");
//public String[] list()
//获取指定目录下的所有文件或者文件夹的名称,组成一个数组
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
System.out.println("\n**************************\n");
//public File[] listFiles()
//获取指定目录下的所有文件或者文件夹组成的File数组
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1.getName());
}
}
}
输出结果:
ExceptionDemo1.java
ExceptionDemo2.java
ExceptionDemo3.java
ExceptionDemo4.java
ExceptionDemo5.java
ExceptionDemo6.java
ExceptionDemo7.java
ExceptionDemo8.java
ExceptionDemo9.java
hadoop
Student.java
StudentEntry.java
Test1.java
zookeeper.txt
金克斯.jpg
靓仔.txt**************************
ExceptionDemo1.java
ExceptionDemo2.java
ExceptionDemo3.java
ExceptionDemo4.java
ExceptionDemo5.java
ExceptionDemo6.java
ExceptionDemo7.java
ExceptionDemo8.java
ExceptionDemo9.java
hadoop
Student.java
StudentEntry.java
Test1.java
zookeeper.txt
金克斯.jpg
靓仔.txt
到底啦!给靓仔一个关注吧!下一篇文章文件过滤器