File类
主要用途
操作电脑中的文件和文件夹,File类是文件和目录路径(文件夹)的抽象表示。也就是说电脑中的文件和文件夹可以封装成File类,可以通过File类对其进行操作。
字段
就是代表当前系统的路径分隔符和文件分隔符
类型 | 字段 | 描述 |
---|---|---|
static String | pathSeparator | 与系统相关的路径分隔符,字符串形式 |
static char | pathSeparatorChar | 与系统相关的路径分隔符 |
static String | separator | 与系统相关的文件名称分隔符,字符串形式 |
static char | separatorChar | 与系统相关的文件名称分隔符 |
public class Demo {
public static void main(String[] args) {
//系统相关的路径分隔符
char pathSeparatorChar = File.pathSeparatorChar;
System.out.println("pathSeparatorChar: "+pathSeparatorChar);
String pathSeparator = File.pathSeparator;
System.out.println("pathSeparator: "+pathSeparator);
//系统相关的名称分隔符
char separatorChar = File.separatorChar;
System.out.println("separatorChar: "+separatorChar);
String separator = File.separator;
System.out.println("separator: "+separator);
}
}
---*---
输出结果:
pathSeparatorChar: ;
pathSeparator: ;
separatorChar: \
separator: \
注意:由于不同系统的分隔符是不同的,所以程序不能把分隔符写死。当需要传入路径的时候,使用(File.separator)获取当前系统的分隔符来代替。👇
public class Demo {
public static void main(String[] args) {
String spr = File.separator;
File f = new File("d:"+spr+"测试"+spr+"c1");
System.out.println(f);
}
}
---*---
输出结果:
d:\测试\c1
系统 | 路径分隔符 | 文件名称分隔符 |
---|---|---|
Windows | ; | \ |
Linx | : | / |
路径
- 概述:
在计算机中路径代表一个文件或文件夹所在的具体位置。一条真实的路径会指向一个文件夹或文件。 - 举例:
有一个1.txt文件存放在 D盘 下的 小说 文件夹中,那这个文件的路径就是D:\小说\1.txt 。小说文件夹的路径是 D:\小说 - 绝对/相对路径:
绝对路径:以盘符开始的路径(完整的)
范例:C:\KuGou
相对路径:不以盘符开始的路径(不完整,以当前文件或者项目根目录,作为参考的路径)
范例:(当前项目所在路径)\tamp\test.txt - 提示:
1.路径不区分大小写
2.在Java程序中,反斜杠表示转义字符,所以我们使用两个反斜杠代表一个反斜杠。\\
常用方法
构造方法
构造方法 | 描述 |
---|---|
File (String pathname) | 通过一个路径字符串创建一个File对象 |
File (String parent,String child) | 把路径分成两部分,通过起始路径和子路径创建File对象 |
File (File parent,String child) | 把路径分成两部分,通过抽象起始路径和子路径创建File对象 |
public class TestFile {
public static void main(String[] args) {
//File (String pathname) 构造方法1
File f1 = new File("e:\\360sd");
System.out.println(f1);
//File (String parent,String child) 构造方法2
File f2 = new File("e:\\","360sd");
System.out.println(f2);
//File (File parent,String child) 构造方法3
File parent = new File("e:\\");
File f4 = new File(parent,"360xd");
System.out.println(f4);
}
}
---*---
输出结果:
e:\360sd
e:\360sd
e:\360xd
输出结果可以看出,上面3中构造方法都创建了路径为 e:\360sd 的对象。也可以说创建File对象就是封装了一个抽象的路径:
- 路径可以是以文件结尾,也可以是文件夹结尾
- 路径可以是相对路径,也可以是绝对路径
- 路径可以是存在的,也可以是不存在的
创建 / 删除的方法
方法名 | 描述 |
---|---|
boolean createNewFile() | 当且仅当具有此名称的文件尚不存在时,创建由此抽象路径名命名的新空文件 |
boolean mkdir() | 创建File对象表示的目录(创建单级文件夹) |
boolean mkdirs() | 创建File对象表示的目录,包括必须但不存在的父目录(创建单级/多级文件夹) |
boolean delete() | 删除File对象表示的目录 |
-
创建文件夹
public class Demo { public static void main(String[] args) { File f1 = new File("e:\\360sd\\小说"); boolean bl = f1.mkdirs(); System.out.println(bl); } } ---*--- 输出结果: true//并且创建了 小说 文件夹的路径:e:\\360sd\\小说
创建文件夹有个方法 mkdir 和 mkdirs 一般使用后者可以创建多级文件夹。创建文件夹可能会出现 2 种情况:
- false:File对象封装路径盘符不存在,该文件夹已经存在
- true:File对象封装路径盘符存在且该路径没有被同名文件夹占用
-
创建文件
public class Demo { public static void main(String[] args) throws IOException { File f1 = new File("e:\\360sd\\1.txt"); boolean bl = f1.createNewFile(); System.out.println(bl); } } ---*--- 输出结果: true //创建了该File对象封装的路径指向的文件:e:\\360sd\\1.txt
创建文件会抛出IO异常,这里通过方法throws处理。如果File对象封装的路径指向的不是文件,那么创建出来的文件是没有后缀的(未知文件类型)。创建文件可能会出现 3 种情况:
- IOException:File对象封装的路径不存在(创建文件需要一条真实且存在的路径)
- false:File对象封装的路径所指向的文件已经存在
- true:File对象封装的路径存在且路径所指向的文件不存在
-
删除文件/文件夹
public class Demo { public static void main(String[] args) throws IOException, InterruptedException { //创建/删除 文件 File f1 = new File("e:\\360sd\\1.txt"); boolean bl1 = f1.createNewFile(); System.out.println("文件创建:"+bl1); Thread.sleep(3000);//让程序休眠3秒 boolean bl2 = f1.delete(); System.out.println("文件删除:"+bl2); //创建/删除 文件夹 File f2 = new File("e:\\360sd\\小说文件夹"); boolean bl3 = f2.mkdirs(); System.out.println("文件夹创建:"+bl3); Thread.sleep(3000);//让程序休眠3秒 boolean bl4 = f2.delete(); System.out.println("文件夹删除:"+bl4); } } ---*--- 输出结果: 文件创建:true 文件删除:true 文件夹创建:true 文件夹删除:true
delete 方法将删除File对象封装路径所指向的文件或文件夹,并且不走回收站。使用 delete 方法可能会出现 2 种情况:
- false:路径所指向的文件夹或文件不存在(删除的文件夹中有内容)
- true:路径所指向的文件夹或文件存在(删除的文件夹中没有内容)
-
获取功能
方法名 描述 String getAbsolutePath() 返回此File对象封装的绝对路径 String getPath() 返回File对象封装的路径 String getName() 返回File对象抽象路径所指向的文件夹或文件 Long length() 获取File对象所指文件大小(以字节显示) public class TestFile { public static void main(String[] args) { File f1 = new File("360sd\\123"); System.out.println("getAbs : "+f1.getAbsolutePath()); System.out.println("getPath: "+f1.getPath()); System.out.println("getName: "+f1.getName()); File f2 = new File("e:\\360sd\\auto.apk"); System.out.println("length : "+f2.length()); } } ---*--- 输出结果: getAbs : D:\java_project\Java_SE_Code\360sd\123 getPath: 360sd\123 getName: 123 length : 10869283
-
判断功能
方法名 描述 boolean exists() 判断此File对象封装的路径所指向的文件或文件夹是否真实存在 boolean isDirectory 判断File对象封装的路径所指向的是否为文件夹 boolean isFile 判断File对象封装的路径所指向的是否是文件 public class TestFile { public static void main(String[] args) { File f1 = new File("e:\\360sd\\auto.apk"); System.out.println("exists : "+f1.exists()); System.out.println("isDirectory: "+f1.isDirectory()); System.out.println("isFile : "+f1.isFile()); } } ---*--- 输出结果: exists : true isDirectory: false isFile : true
注意:判断路径指向是文件夹还是文件的前提是,这条路径必须真实存在否则均返回 false。
-
遍历功能
方法名 描述 String[ ] list() 返回一个String数组,表示该File对象封装路径所指向文件夹中所有的文件和子文件夹 File[ ] listFiles() 返回一个File数组,表示该File对象封装路径所指向文件夹中所有的文件和子文件夹 public class Demo { public static void main(String[] args) { File f = new File("e:\\360sd"); if (f.exists()){//判断路径是否真实 if (f.isDirectory()){//判断路径指向是否是文件夹 File[] files = f.listFiles(); for (File file : files) { File ff = file; System.out.println(ff); } }else { System.out.println("路径不是文件夹"); } }else { System.out.println("路径不存在!"); } } } ---*--- 输出结果: e:\360sd\1.txt e:\360sd\临时文件夹 e:\360sd\图片.jpg e:\360sd\新建文件夹 e:\360sd\新建文件夹 (2) e:\360sd\新建文件夹 (3)
注意:使用 list 和 listFiles 方法的前提必须是该File对象封装路径真实存在且路径指向文件夹而不是文件,否则返回null。
-
遍历某文件夹中所有的文件
public class Demo { public static void main(String[] args) { File f = new File("e:\\360sd"); show(f); } //遍历方法 public static void show(File f) { if (f.exists()){//判断路径是否真实 if (f.isDirectory()){//判断路径指向是否是文件夹 File[] files = f.listFiles(); if (files!=null) { for (File file : files) { show(file); } } }else { System.out.println(f.getAbsoluteFile()); } }else { System.out.println("路径不存在!"); } } } ---*--- 输出结果: 1-e:\360sd\1.txt 2-e:\360sd\图片.jpg 3-e:\360sd\新建文件夹 (2)\小说\土豆.txt 4-e:\360sd\新建文件夹 (2)\小说\豆皮.txt