一、概述
java.io.File
类是文件和目录路径名的抽象表示
主要用于文件和目录的创建 查找和删除等操作
Java将电脑中的文件和文件夹目录封装为了一个File类
可以使用File类对文件和文件夹进行操作
可以使用File的方法来:
- 创建一个文件/文件夹
- 删除文件/文件夹
- 获取文件/文件夹
- 判断文件/文件夹是否存在
- 对文件夹进行遍历
- 获取文件的大小
File类是一个与系统无关的类 任何操作系统都可以使用这个类中的方法
二、File类的静态成员变量
1、路径分隔符
File.pathSeparator()
路径分隔符在Windows下为分号 在Linux下为冒号
使用:
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);
2、文件名称分隔符
文件名称分隔符在Windows下为反斜杠 在Linux下为正斜杠
File.separator()
String separator = File.separator;
System.out.println(separator);
不同系统下的路径分隔符和文件名称分隔符是不同的
Windows:C:\code\test.txt
Linux:C:/code/test.txt
操作系统的路径不能写死
因为项目可能会部署到不同的系统下
因此 上例可写作:
"C:"+File.separator+"code"+File.separator+"test.txt"
手写分隔符用FIle类的分隔符方法代替
三、路径的概述
1、绝对路径
绝对路径是一个完整的路径
是以盘符(例:C盘或D盘)开始的路径
例:C:\\code\\
2、相对路径
相对路径是一个简化的路径
相对于当前项目的根目录(例:C:\code\)
若使用当前项目的根目录 则路径可以简化书写
例:C:\code\test.txt可简化为test.txt
省略项目的根目录
注:
1、路径是不区分大小写的
2、路径中的文件名称分隔符在Windows中使用反斜杠
反斜杠是转义字符 两个反斜杠才代表一个普通的反斜杠
四、File类的构造方法
1、File(String pathname)
public File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
参数:pathname 字符串形式的路径名称
- 路径可以以文件结尾 也可以以文件夹结尾
- 路径可以是相对路径 也可以是绝对路径
- 路径可以是存在的 也可以是不存在的
创建File对象 只是将字符串的路径封装为File对象 不考虑路径的真假情况
例:
File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
System.out.println(file1);// F:\IdeaProjects\filetest\a.txt
File file2=new File("F:\\IdeaProjects\\filetest");
System.out.println(file2);// F:\IdeaProjects\filetest
File file3=new File("a.txt");
System.out.println(file3);// a.txt
2、File(String parent, String child)
public File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的File实例
参数1:parent 父路径
参数2:child 子路径
- 父路径和子路径可以单独书写 使用灵活
- 父路径和子路径都可以变化
private static void filemethod2(String parent, String child)
{
File file=new File(parent,child);
System.out.println(file);
}
3、File(File parent, String child)
public File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的File实例
参数1:parent 父路径
参数2:child 子路径
- 父路径和子路径可以单独书写 使用灵活
- 父路径是File类型 因此可以使用File类的方法对路径进行一些操作 再使用路径创建对象
// 父路径
File parent=new File("F:\\");
File file=new File(parent,"a.txt");
System.out.println(file);// F:\a.txt
五、File类的常用方法(获取、判断、创建删除、遍历)
Ⅰ、获取之方法
1、getAbsolutePath()
public String getAbsolutePath()
返回此File的绝对路径名字符串
获取构造方法中传递的路径
无论路径是绝对的还是相对的 该方法返回的永远是绝对路径
File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
System.out.println(file1.getAbsolutePath());// F:\IdeaProjects\filetest\a.txt
File file2=new File("a.txt");
System.out.println(file2.getAbsolutePath());// F:\IdeaProjects\filetest\a.txt
2、getPath()
public String getPath()
将此File转换为路径名字符串
获取构造方法中传递的路径
构造方法中传递的是什么 返回的就是什么
File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
File file2=new File("a.txt");
System.out.println(file1.getPath());// F:\IdeaProjects\filetest\a.txt
System.out.println(file2.getPath());// a.txt
注:
File类的toString()调用的就是该方法
源码:
public String toString() {
return getPath();
}
3、getName()
public String getName()
返回由此File表示的文件或目录的名称
获取的就是构造方法传递路径的结尾部分(要么是文件 要么是文件夹)
File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
System.out.println(file1.getName());// a.txt
File file2=new File("F:\\IdeaProjects\\filetest");
System.out.println(file2.getName());// filetest
4、length()
public long length()
返回由此File表示的文件的大小(不是长度)
获取的是构造方法指向的文件的大小 以字节为单位
- 文件夹没有大小概念 因此无法获取文件夹的大小 返回0
- 若构造方法中给出的路径不存在 则返回0
File file1=new File("F:\\IdeaProjects\\filetest\\a.jpg");
System.out.println(file1.length());// 2582
File file2=new File("F:\\IdeaProjects\\filetest\\b.jpg");
System.out.println(file2.length());// 0
File file3=new File("F:\\IdeaProjects\\filetest");
System.out.println(file3.length());// 0
Ⅱ、判断之方法
1、exists()
public boolean exists()
此File表示的文件或目录是否实际存在
用于判断构造方法中的路径是否存在
- 若存在 返回true
- 若不存在 返回false
File file1=new File("F:\\IdeaProjects\\filetest");
System.out.println(file1.exists());// true
File file2=new File("F:\\IdeaProjects\\aaa");
System.out.println(file2.exists());// false
File file3=new File("a.jpg");// 访问的是项目路径下的相对路径
System.out.println(file3.exists());// true
File file4=new File("123.jpg");// 访问的是项目路径下的相对路径
System.out.println(file4.exists());// false
2、isDirectory()和isFile()
isDirectory():
public boolean isDirectory()
此File表示的是否为目录
与isFile()相反 因为不是目录就是文件
路径必须是存在的 否则返回false
isFile():
public boolean isFile()
此File表示的是否为文件
与isDirectory()相反 因为不是目录就是文件
路径必须是存在的 否则返回false
用于判断构造方法中给定的路径是否以文件夹/文件结尾
- 若为是 返回true
- 若为否 返回false
File file1=new File("F:\\IdeaProjects\\filetest");
// 该文件或文件夹若存在 才获取
if (file1.exists())
{
System.out.println(file1.isDirectory());// true
System.out.println(file1.isFile());// false
}
File file2=new File("F:\\IdeaProjects\\filetest\\a.jpg");
// 该文件或文件夹若存在 才获取
if (file1.exists())
{
System.out.println(file2.isDirectory());// false
System.out.println(file2.isFile());// true
}
Ⅲ、创建删除之方法
1、createNewFile()
public boolean createNewFile()
当且仅当具有该名称的文件尚不存在时 创建一个新的空文件
返回值:布尔值
- true:文件不存在 创建文件
- false:文件已存在 不创建
注:
- 1、此方法只能创建文件 不能创建文件夹
- 2、路径必须为真实存在的 否则抛出异常
该方法会抛出IOException 因此 调用该方法必须处理该异常 要么throws 要么trycatch
File file1=new File("F:\\IdeaProjects\\filetest\\1.txt");
System.out.println(file1.createNewFile());// true
File file2=new File("2.txt");
System.out.println(file2.createNewFile());// true 填写相对路径会创建在当前项目的src下
File file3=new File("F:\\IdeaProjects\\filetest\\新建文件夹");
System.out.println(file3.createNewFile());// true 创建了一个文件 名为新建文件夹
File file4=new File("F:\\abc\\3.txt");
System.out.println(file4.createNewFile());// Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
2、mkdir()和mkdirs()
mkdir():
public boolean mkdir()
创建由此File表示的目录
mkdirs():
public boolean mkdirs()
创建由此File表示的目录 包括任何必需但不存在的父目录
mkdir() 只能创建单级文件夹
mkdirs() 既可以创建单级文件夹 又可以创建多级文件夹 因此建议使用此方法
返回值:布尔值
- true:文件夹不存在 创建文件夹
- false:文件夹已存在 不创建 / 给出的路径不存在
这两个方法只能创建文件夹 并不能创建文件
File file1=new File("F:\\IdeaProjects\\filetest\\folder");
System.out.println(file1.mkdir());// true
File file2=new File("F:\\IdeaProjects\\filetest\\f\\o\\l\\d\\e\\r");
System.out.println(file2.mkdir());// false
System.out.println(file2.mkdirs());// true
File file3=new File("F:\\IdeaProjects\\filetest\\t.txt");
System.out.println(file3.mkdirs());// true 创建了一个文件夹 名为t.txt
File file4=new File("F:\\IdeaProjects\\fff\\k.txt");
System.out.println(file4.mkdirs());// true 不会抛出异常 但路径不存在不会创建
3、delete()
public boolean delete()
删除由此File表示的文件或目录
该方法既可以删除文件又可以删除文件夹
返回值:布尔值
- true:文件或文件夹删除成功
- false:文件夹中有内容 不删除 / 给定的路径不存在
注:
该方法是直接在硬盘删除文件或文件夹 文件不会到回收站 请谨慎
File file1=new File("2.txt");
System.out.println(file1.delete());// true
Ⅳ、目录遍历之方法
1、list()
public String[] list()
返回一个String数组 表示该File目录中的所有子文件或目录
获取目录中所有文件或文件夹的名称 并将多个名称存储到字符串类型的数组中
File file1=new File("F:\\IdeaProjects\\filetest");
String[] list1 = file1.list();
for (String fileName:list1)
{
System.out.println(fileName);
}
File file2=new File("F:\\IdeaProjects\\filetest\\1.txt");
String[] list2 = file2.list();
for (String fileName:list2)
{
System.out.println(fileName);// Exception in thread "main" java.lang.NullPointerException
}
File file3=new File("F:\\IdeaProjects\\fff");
String[] list3 = file3.list();
for (String fileName:list3)
{
System.out.println(fileName);// Exception in thread "main" java.lang.NullPointerException
}
2、listFiles()
public File[] listFiles()
返回一个File数组 表示该File目录中的所有的子文件或目录
获取目录中所有文件或文件夹 将这些文件和文件夹封装为File对象 并将多个File对象存储到File类型的数组中
File file1=new File("F:\\IdeaProjects\\filetest");
File[] files = file1.listFiles();
for (File file:files)
{
System.out.println(file);
}