后面带Char的是转为char类型,其实都是一样的结果。
为什么要单独把地址的特殊字符单独包装为静态类呢
因为在windows系统中,两个地址中间用分号[;]隔开,像环境变量中的path的内容。
但是在Linux系统中,两个地址中间是用冒号[:]隔开的,在使用File类的时候,路径的特殊符号尽量使用内置的静态属性,这样就可以根据系统的不同,动态的变换了
下面也一样,windows中为\,Linux系统的为/
// ;
System.out.println(File.pathSeparatorChar);
System.out.println(File.pathSeparator);
// \
System.out.println(File.separator);
System.out.println(File.separatorChar);
基本都是把构造函数的参数打印出来,不要求地址真实存在
直接传入文件夹地址(常用)
// 双斜杠\\在地址里代表单个\ 这是我项目的地址:D:\MyProgramSoftWare\MyProject\test
// 绝对路径 D:\xxx\xxx
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
System.out.println(f1); // D:\MyProgramSoftWare\MyProject\test
// 相对路径 .\
File f2 = new File(".\\");
System.out.println(f1); // D:\MyProgramSoftWare\MyProject\test
封装为方法,把子地址当做参数,好处是可以直接调用方法传入可变的地址
public static void main(String[] args) {
System.out.println(test("test")); // D:\MyProgramSoftWare\MyProject\test
System.out.println(test("test2")); // D:\MyProgramSoftWare\MyProject\test2
System.out.println(test("test3")); // D:\MyProgramSoftWare\MyProject\test3
}
public static File test(String childPath){
File file = new File("D:\\MyProgramSoftWare\\MyProject\\",childPath);
return file;
}
传入一个文件类,一个字符串,好处是可以使用文件类的方法
public static void main(String[] args) {
File f = new File("D:\\MyProgramSoftWare\\MyProject");
System.out.println(test(f,"test")); // D:\MyProgramSoftWare\MyProject\test
}
public static File test(File file, String childPath){
/*
getPath方法就是toString方法,
底层是在toString方法里调用了getPath方法,
实际上都是一个方法
public String toString() {
return getPath();
}
*/
File f = new File(file.getPath(), childPath);
return f;
}
还有一个传入Url对象的构造函数,暂时不讲
方法分为两种,下面一一介绍,只列举了部分常用方法
判断文件是否存在**(超常用)**
public static void main(String[] args) {
// 真实存在的文件夹 绝对路径
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
// 不真实存在的文件 绝对路径
File f2 = new File("D:\\MyProgramSoe\\MyProject\\test\\b.txt");
// 真实存在的文件
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
// 判断路径是否指向文件
System.out.println(f1.exists()); // true
System.out.println(f2.exists()); // false
System.out.println(f3.exists()); // true
}
判断是否为绝对路径**(不要求文件或文件夹真实存在)**
public static void main(String[] args) {
// 真实存在的文件夹 绝对路径
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
// 相对路径
File f2 = new File(".\\");
// 不真实存在的文件夹 绝对路径
File f3 = new File("D:\\MyProgramSoe\\MyProject\\test");
// 判断是否为绝对路径
boolean a1 = f1.isAbsolute();
boolean a2 = f2.isAbsolute();
boolean a3 = f3.isAbsolute();
System.out.println(a1); // true
System.out.println(a2); // false
System.out.println(a3); // true
}
判断路径是否指向文件夹**(要求文件或文件夹真实存在)**
public static void main(String[] args) {
// 真实存在的文件夹 绝对路径
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
// 不真实存在的文件夹 绝对路径
File f2 = new File("D:\\MyProgramSoe\\MyProject\\test");
// 真实存在的文件
File f3 = new File("D:\\MyProgramSoe\\MyProject\\test\\a.txt");
// 判断路径是否指向文件夹
System.out.println(f1.isDirectory()); // true
System.out.println(f2.isDirectory()); // false
System.out.println(f3.isDirectory()); // false
}
判断路径是否指向文件**(要求文件或文件夹真实存在)**
public static void main(String[] args) {
// 真实存在的文件夹 绝对路径
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
// 不真实存在的文件 绝对路径
File f2 = new File("D:\\MyProgramSoe\\MyProject\\test\\b.txt");
// 真实存在的文件
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
// 判断路径是否指向文件
System.out.println(f1.isFile()); // false
System.out.println(f2.isFile()); // false
System.out.println(f3.isFile()); // true
}
获取文件或文件夹的名称**(不要求文件或文件夹真实存在)**
public static void main(String[] args) {
// 真实存在的文件夹 绝对路径
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
// 不真实存在的文件 绝对路径
File f2 = new File("D:\\MyProgramSoe\\MyProject\\test\\b.txt");
// 真实存在的文件
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
// 判断路径是否指向文件
System.out.println(f1.getName()); // test
System.out.println(f2.getName()); // b.txt
System.out.println(f3.getName()); // a.txt
}
创建文件()(不可以在不存在的父目录下创建文件,否则会异常)
public static void main(String[] args) throws IOException {
// 创建文件,真实存在的父目录
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa.txt");
// 创建文件,不真实存在的父目录
File f2 = new File("D:\\MyProgram\\MyProject\\test\\b.txt");
// 创建文件夹,真是存在的父目录
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb");
System.out.println(f1.createNewFile()); // true 创建成功
//System.out.println(f2.createNewFile()); // Exception in thread "main" java.io.IOException: 系统找不到指定的路径。 创建失败
System.out.println(f3.createNewFile()); // true 创建成功,虽然没有文件后缀,但也是个文件
}
结果

创建文件夹**(不可以在不存在的父目录下创建文件夹,否则会异常)**
public static void main(String[] args) throws IOException {
// 创建文件,真实存在的父目录
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa.txt");
// 创建文件夹,不真实存在的父目录
File f2 = new File("D:\\MyProgram\\MyProject\\test\\ccc");
// 创建文件夹,真实存在的父目录
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb");
System.out.println(f1.mkdir()); // true 创建成功,虽然有文件后缀,但也是个文件夹
//System.out.println(f2.mkdir()); // Exception in thread "main" java.io.IOException: 系统找不到指定的路径。 创建失败
System.out.println(f3.mkdir()); // true 创建成功
}
结果

创建文件夹PLUS((可以在不存在的父目录下创建文件夹))
public static void main(String[] args) throws IOException {
// 创建文件,真实存在的父目录
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
// 创建文件夹,不真实存在的父目录aaa
File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa\\bbb");
// 创建文件夹,真实存在的父目录
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a");
System.out.println(f1.mkdirs()); // true 创建成功,虽然有文件后缀,但也是个文件夹
System.out.println(f2.mkdirs()); // true 创建成功,虽然父目录aaa不存在,但是也会创建成功
System.out.println(f3.mkdirs()); // true 创建成功
}
结果

删除文件或文件夹
public static void main(String[] args) throws IOException {
// 删除文件,真实存在的文件
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
// 删除文件夹,aaa里面包含了bbb文件夹
File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa");
// 删除文件夹,真实存在的文件夹
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a");
System.out.println(f1.delete()); // true 删除成功
System.out.println(f2.delete()); // false 删除失败 如果文件夹里面有文件夹或者文件,或者文件里面有内容,则不能删除
System.out.println(f3.delete()); // true 删除成功
}
重命名文件或文件夹
先创建一个文件a.txt,一个文件夹aaa用来测试
public static void main(String[] args) throws IOException {
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa");
System.out.println(f1.createNewFile()); // true
System.out.println(f2.mkdir()); // true
}
分别重命名为b.txt,bbb
public static void main(String[] args) throws IOException {
// 创建文件夹,真实存在的父目录
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa");
System.out.println(f1.renameTo(new File("D:\\MyProgramSoftWare\\MyProject\\test\\b.txt"))); // true
System.out.println(f2.renameTo(new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb"))); // true
}
遍历文件夹**(如果被遍历的是文件的话,则异常)**
public static void main(String[] args) throws IOException {
// 遍历项目根目录
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\b.txt");
/*
.idea
b.txt
bbb
out
src
test.iml
*/
String[] list = f1.list();
for (String s : list) {
System.out.println(s);
}
/*String[] list2 = f3.list(); // 异常:Exception in thread "main" java.lang.NullPointerException
for (String s : list2) {
System.out.println(s);
}*/
}
获取文件的大小**(如果为文件夹则返回0)**
public static void main(String[] args) throws IOException {
// 遍历项目根目录
File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb");
File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\b.txt");
File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bizhi.jpg");
System.out.println(f1.length()); // 0
System.out.println(f2.length()); // 9
System.out.println(f3.length()); // 1439886
}
结果
