File类的使用
- File类的一个对象,代表一个文件或一个文件目录;
- File类声明在java.io包下;
- File类中涉及的方法只是关于文件或文件目录的创建、删除、重命名、获取相关信息的方法,不涉及到写入或读取文件内容的操作。文件内容的操作,必须使用IO流来完成;
- File类的使用常将其实例化对象作为参数传递给流的构造器中。
1.File类的实例化
-
构造器一:public File(String pathname),pathname:文件的路径
-
构造器二:public File(String parent, String child)
-
构造器三:public File(File parent, String child)
@Test public void test1(){ //构造器一:public File(String pathname) var file1 = new File("Hello.txt");//相对于当前包下的文件 var file2 = new File("C:\\Users\\ASUS\\IdeaProjects\\Ther\\src\\JavaSE\\IO/Hello.txt"); System.out.println(file1); System.out.println(file2); //构造器二:public File(String parent, String child) var file3 = new File("C:\\Users\\ASUS\\IdeaProjects","Ther"); System.out.println(file3); //构造器三:public File(File parent, String child) var file4 = new File(file3,"src\\JavaSE\\IO/Hello.txt"); System.out.println(file4); }
相对路径与绝对路径
相对路径:相对于某个路径下,指明的路径。
绝对路径:包含盘符在内的文件或文件目录的路径
分隔符
路径分隔符和系统有关,在windows和Dos系统下默认使用“\”来表示,在UNIX和URL中使用“/”来表示(实际上在windows下用/也不会报错),java程序支持跨平台运行,因此路径分隔符要慎用。为了解决在不同系统下分隔符不同的隐患,File类提供了一个常量:public static final String separator根据操作系统,动态的提供分隔符。
2.File类的常用方法
方法名 | 说明 |
---|---|
public String getAbsolutePath() | 获取绝对路径 |
public String getPath() | 获取相对路径 |
public String getName() | 获取文件名 |
File public File getParentFile() | 获取父级文件路径并返回FIle类型 |
public long length() | 获取文件内容长度 |
public long lastModified() | 获取文件的最后一次修改时间,返回一个时间戳 |
public boolean renameTo(File dest) | 重命名 |
public String[] list() | 返回当前文件目录下的所有文件名 |
public File[] listFiles() | 返回当前文件目录下的所有文件路径 |
public boolean exists() | 判断是否存在 |
public boolean isDirectory() | 判断是否是一个文件目录 |
public boolean isFile() | 判断是否是一个文件 |
public boolean canRead() | 文件是否可读 |
public boolean canWrite() | 文件是否可写 |
public boolean isHidden() | 文件是否隐藏 |
public boolean createNewFile() | 如果该文件不存在创建一个新的文件(路径中上一级文件目录存在) |
public boolean delete() | 删除文件或文件目录(删除文件目录要求文件目录中不能有文件或文件目录) |
public boolean mkdirs() | 创建多级文件目录 |
代码示例:
@Test
public void test2(){
File file2 = new File("Hello.txt");
File file1 = new File("C:\\Users\\ASUS\\IdeaProjects\\Ther\\src\\JavaSE\\IO\\Hello.txt");
//获取绝对路径 public String getAbsolutePath()
System.out.println(file1.getAbsolutePath());
//获取相对路径 public String getPath()
System.out.println(file1.getPath());
//获取文件名 public String getName()
System.out.println(file1.getName());
//获取父级文件路径并返回File public File getParentFile()
System.out.println(file1.getParentFile());
//获取文件内容长度 public long length()
System.out.println(file1.length());
//文件的最后一次修改时间 返回的是一个时间戳 public long lastModified()
System.out.println(new Date(file1.lastModified()));
//public boolean renameTo(File dest):重命名File成功返回true
System.out.println(file1.renameTo(new File("C:\\Users\\ASUS\\IdeaProjects\\Ther\\src\\JavaSE\\IO\\Hello.txt")));
System.out.println("----------------");
System.out.println(file2.getAbsolutePath());
System.out.println(file2.getPath());
System.out.println(file2.getName());
//file2中文件Hello.txt不存在,所以父级路径为null
System.out.println(file2.getParentFile());
System.out.println(file2.length());
System.out.println(new Date(file2.lastModified()));
}
/*输出:
C:\Users\ASUS\IdeaProjects\Ther\src\JavaSE\IO\Hello.txt
C:\Users\ASUS\IdeaProjects\Ther\src\JavaSE\IO\Hello.txt
Hello.txt
C:\Users\ASUS\IdeaProjects\Ther\src\JavaSE\IO
5
Mon Jul 26 22:31:01 CST 2021
true
----------------
C:\Users\ASUS\IdeaProjects\Ther\Hello.txt
Hello.txt
Hello.txt
null
0
Thu Jan 01 08:00:00 CST 1970
*/
@Test
public void test3(){
File file = new File("C:\\Users\\ASUS\\IdeaProjects\\Ther");
//public String[] list():获取当前目录下的所有文件名
String [] list = file.list();
for (String i:
list) {
System.out.println(i);
}
//public File[] listFiles():获取当前目录下的所有文件返回类型为File
File [] files = file.listFiles();
for (File f:
files) {
System.out.println(f);
}
}
//一些常用的判断方法
@Test
public void test4(){
File file = new File("C:\\Users\\ASUS\\IdeaProjects\\Ther\\src\\JavaSE\\IO\\Hello.txt");
//public boolean exists():判断是否存在
System.out.println(file.exists());
//public boolean isDirectory():判断该File对象是否是一个文件目录
System.out.println(file.isDirectory());
//public boolean isFile():判断该File对象是否是一个文件
System.out.println(file.isFile());
//public boolean canRead():判断是否可读
System.out.println(file.canRead());
//public boolean canWrite():判断是否可写
System.out.println(file.canWrite());
//public boolean isHidden():判断是否隐藏
System.out.println(file.isHidden());
/*输出:
true
false
true
true
true
false
*/
}
//创建,删除文件或文件目录
@Test
public void test5() throws IOException{
File file1 = new File("Hi.txt");
if(!file1.exists()){
//public boolean createNewFile():文件创建的方法,创建该File文件
file1.createNewFile();
System.out.println("文件创建成功 ");
}else {
//public boolean delete():文件删除的方法
file1.delete();
System.out.println("文件删除成功 ");
}
//父级目录存在
File file2 = new File("C:\\Users\\ASUS\\IdeaProjects\\Ther\\Hello");
if(!file2.exists()){
//public boolean mkdir():文件目录创建的方法
//返回判断是否创建成功,创建失败有两种情况:1.该文件目录已经存在,2.文件的父级目录不存在
Boolean flag = file2.mkdir();
if (!flag){
file2.mkdirs();
}
System.out.println("文件目录创建成功 ");
}else {
//删除文件目录要求文件目录不能有文件
file2.delete();
}
//父级目录补存在
File file3 = new File("C:\\Users\\ASUS\\IdeaProjects\\Ther\\Hello\\Hi");
if(!file3.exists()){
Boolean flag = file3.mkdir();
if (!flag){
//public boolean mkdirs():创建多级文件目录的方法
file3.mkdirs();
}
System.out.println("文件目录创建成功 ");
}else {
file3.delete();
}
}