java中File类的基本使用
一、File类基本概述
java.io.File类:文件和目录路径名的抽象表示形式
java中把文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作。
我们可以使用File类的方法有:
创建文件、文件夹
删除文件、文件夹
获取文件、文件夹
判断文件、文件夹是否存在
对文件夹进行遍历
获取文件的大小
File类是一个与系统无关的类,任何操作系统都可以使用File类的方法
重点记住这三个单词
file:文件
directory:文件夹
path:路径
二、File类中的静态成员变量
static String pathSeparator:字符串类型的路径分割符,在windows系统中为’;‘(分号),在linux系统中为‘:’(冒号)。
static char pathSeparatorChar:字符类型的路径分割符,在windows系统中为’;'(分号),在linux系统中为‘:’(冒号)。
static String separator:字符串类型的默认名称分割符,在windows系统中为‘/’(反斜杠),在linux系统中为‘\’(斜杠)。
static char separatorChar:字符类型的默认名称分割符,在windows系统中为‘/’(反斜杠),在linux系统中为‘\’(斜杠)。
静态成员变量使用实例:
package demo01;
import java.io.File;
public class Demo01File {
public static void main(String[] args) {
/*
static String pathSeparator:字符串类型的路径分割符,在windows系统中为';'(分号),在linux系统中为‘:’(冒号)。
static char pathSeparatorChar:字符类型的路径分割符,在windows系统中为';'(分号),在linux系统中为‘:’(冒号)。
*/
String path_separator1 = File.pathSeparator;
char path_separator2 = File.pathSeparatorChar;
System.out.println("path_separator1 = " + path_separator1); //path_separator1 = ;
System.out.println("path_separator2 = " + path_separator2); //path_separator2 = ;
/*
static String separator:字符串类型的默认名称分割符,在windows系统中为‘/’(反斜杠),在linux系统中为‘\’(斜杠)。
static char separatorChar:字符类型的默认名称分割符,在windows系统中为‘/’(反斜杠),在linux系统中为‘\’(斜杠)。
*/
String separator1 = File.separator;
char separator2 = File.separatorChar;
System.out.println("separator1 = " + separator1); //separator1 = \
System.out.println("separator2 = " + separator2); //separator2 = \
}
}
实例运行结果:
path_separator1 = ;
path_separator2 = ;
separator1 = \
separator2 = \
三、File类中路径的使用
路径概念:用于指明需要操作的文件或者文件夹所在位置的字符串,File类中路径分为绝对路径和相对路径。
3.1、绝对路径
概念:以盘符(例如:C;D)开始的一个完整路径。
示例:C:\java\a.txt
C:\a.txt
3.2、相对路径
功能:一个简化的路径,相对是指相对于当前项目的根路径。例如文件绝对路径为:E:\java\File\src\demo01\a.txt,
当前文件的根路径为:E:\java\File,则路径可以简写为:src\demo01\a.txt。
3.3、路径使用注意事项
1、路径是不区分英文字符(即A-Z,a-z)大小写的。
2、路径中文件名称分割符windows使用反斜杠(\),但在Java中单个反斜杠表示转义字符,因此路径中的一个普通反斜杠需要使用
两个反斜杠表示。
四、File类的构造方法
功能:创建一个File类对象,File类中常用的构造方法为File(String pathname)、File(String parent, String child)、File(File parent, String child),具体使用如下所示。
4.1、File(String pathname)
功能:通过将给定的路径字符串转换为抽象的路径名创建一个File实例。
参数:
String pathname:字符串格式的路径名称
注意事项:
1、路径可以以文件结尾也可以以文件夹结尾。
2、路径可以是相对路径也可以是绝对路径。
3、路径可以是存在的,也可以是不存在的。创建File对象只是将字符串格式的路径封装为File对象,不考虑路径的真假情况。
4、如果传入的pathname是什么样的print输出File对象时显示的也是什么样的。
4.2、File(String parent, String child)
功能:将parent字符串和child字符串拼接在一起创建一个File对象。
参数:将路径分为两个部分
String parent:字符串格式的父路径名称
String child:字符串格式的子路径名称
优点:父路径和子路径可以分别书写和修改,使用起来更加灵活。
4.3、File(File parent, String child)
功能:根据File类型的parent和字符串类型的child创建一个新的File对象
参数:将路径分为两个部分
File parent:File类型的父路径
String child:字符串格式的子路径
优点:
父路径和子路径可以分别书写和修改,使用起来更加灵活
父路径格式是File类型,可以使用File类的方法对父路径进行一些操作
File类构造方法使用实例:
package demo01;
import java.io.File;
/**
* File类构造方法的使用
*/
public class Demo02File {
public static void main(String[] args) {
show01();
System.out.println("--------");
show02("E:\\java\\", "javaCourse\\File"); // E:\java\javaCourse\File
System.out.println("---------");
show03();
}
/**
* File(String pathname)构造方法的使用
*/
public static void show01(){
// 绝对路径
File file1 = new File("E:\\java学习资料\\06-File类与IO流\\01 File类");
System.out.println(file1); //E:\java学习资料\06-File类与IO流\01 File类
File file2 = new File("E:\\java\\javaCourse\\File\\src\\a.txt");
System.out.println(file2); //E:\java\javaCourse\File\src\a.txt
// 相对路径
File file3 = new File(".//a.txt");
System.out.println(file3); //.\a.txt
File file4 = new File("../demo02//a.txt");
System.out.println(file4); //..\demo02\a.txt
}
/**
* File(String parent, String child)构造方法的使用
*/
public static void show02(String parent, String child){
File file1 = new File(parent, child);
System.out.println(file1);
}
/**
* File(File parent, String child)构造方法的使用
*/
public static void show03(){
File parent = new File("E:\\");
File file1 = new File(parent, "a.txt");
System.out.println(file1); //E:\a.txt
}
}
实例运行结果:
E:\java学习资料\06-File类与IO流\01 File类
E:\java\javaCourse\File\src\a.txt
.\a.txt
..\demo02\a.txt
--------
E:\java\javaCourse\File
---------
E:\a.txt
五、File类中常用的获取方法
5.1、public String getAbsolutePath()
功能:获取File对象的绝对路径名称字符串。
注意:无论File对象是绝对路径还是相对路径返回的都是绝对路径。
5.2、public String getPath()
功能:将File对象转换为字符串格式的路径名称,即获取构造方法中传递的名称。
5.3、public String getName()
功能:获取File对象表示的文件或者文件夹的名称,即路径名称最后一个斜杠或者反斜杠后面的字符串。
5.4、public long length()
功能:获取File对象表示文件的对象。
注意事项:
如果File对象表示的文件存在返回以字节数计算的文件大小
人工File对象表示的为文件夹或者文件不存在返回0
5.5、public String getParent()
功能:获取File对象的父路径,即最后一个斜杠或者反斜杠前面的字符串。
File类常用获取方法实例:
package demo01;
import java.io.File;
import java.io.IOException;
/**
* File类获取功能方法的使用
*/
public class Demo03File {
public static void main(String[] args) {
getAbsolutePath();
System.out.println();
getPath();
System.out.println();
getName();
System.out.println();
length();
System.out.println();
getParent();
}
/*
getAbsolutePath():获取File对象的绝对路径
*/
public static void getAbsolutePath(){
//创建绝对路径的File对象
File f1 = new File("E:\\java\\a.txt");
// 创建相对路径的File对象
File f2 = new File("a.txt");
//getAbsolutePath():获取File对象的绝对路径
String absolute_path1 = f1.getAbsolutePath();
String absolute_path2 = f2.getAbsolutePath();
// 输出结果
System.out.println(absolute_path1); //E:\java\a.txt
System.out.println(absolute_path2); //E:\java\JavaCourse\File\a.txt
}
/*
getPath():将File对象转换为字符串格式的路径名称
*/
public static void getPath(){
//创建绝对路径的File对象
File f1 = new File("E:\\java\\a.txt");
// 创建相对路径的File对象
File f2 = new File("a.txt");
// getPath():将File对象转换为字符串格式的路径名称
String path1 = f1.getPath();
String path2 = f2.getPath();
//输出结果
System.out.println(path1); //E:\java\a.txt
System.out.println(path2); //a.txt
}
/*
getName():获取File对象表示的文件或者文件夹的名称,即路径名称最后一个斜杠或者反斜杠后面的字符串。
*/
public static void getName(){
//创建绝对路径的File对象
File f1 = new File("E:\\java\\a.txt"); //以文件结尾
File f2 = new File("E:\\java\\javaCourse"); //以文件夹结尾
// 创建相对路径的File对象
File f3 = new File("javaCourse\\a.txt"); //以文件结尾
File f4 = new File("javaCourse\\File"); //以文件夹结尾
//getName():获取File对象表示的文件或者文件夹的名称,即路径名称最后一个斜杠或者反斜杠后面的字符串。
String name1 = f1.getName();
String name2 = f2.getName();
String name3 = f3.getName();
String name4 = f4.getName();
//输出结果
System.out.println(name1); //a.txt
System.out.println(name2); //javaCourse
System.out.println(name3); //a.txt
System.out.println(name4); //File
}
/*
length():获取文件大小
*/
public static void length(){
//以相对路径创建File对象
File f1 = new File("src\\File类.txt"); //文件存在
File f2 = new File("src\\a.txt"); //文件不存在
File f3 = new File("src\\demo01"); //为文件夹
//length():获取文件大小
long len1 = f1.length();
long len2 = f2.length();
long len3 = f3.length();
//输出结果
System.out.println(len1); //4015
System.out.println(len2); //0
System.out.println(len3); //0
}
/*
getParent():获取File对象的父路径,即最后一个斜杠或者反斜杠前面的字符串。
*/
public static void getParent(){
//创建绝对路径的File对象
File f1 = new File("E:\\java\\a.txt"); //以文件结尾
File f2 = new File("E:\\java\\javaCourse"); //以文件夹结尾
// 创建相对路径的File对象
File f3 = new File("javaCourse\\a.txt"); //以文件结尾
File f4 = new File("javaCourse\\File"); //以文件夹结尾
//getParent():获取File对象的父路径,即最后一个斜杠或者反斜杠前面的字符串。
String parent_path1 = f1.getParent();
String parent_path2 = f2.getParent();
String parent_path3 = f3.getParent();
String parent_path4 = f4.getParent();
//输出结果
System.out.println(parent_path1); //E:\java
System.out.println(parent_path2); //E:\java
System.out.println(parent_path3); //javaCourse
System.out.println(parent_path4); //javaCourse
}
}
实例运行结果:
E:\java\a.txt
E:\java\JavaCourse\File\a.txt
E:\java\a.txt
a.txt
a.txt
javaCourse
a.txt
File
8396
0
4096
E:\java
E:\java
javaCourse
javaCourse
六、File类中判断功能的方法
6.1、public boolean exists()
功能:判断File对象表示的文件或者文件夹是否存在,即判断构造方法中传递的路径是否存在,存在返回true,不存在返回false。
6.2、public boolean isFile()
功能:判断File对象表示的是否为文件,是返回true,否返回false。
注意事项:如果构造方法传递的路径不存在直接返回false。
6.3、public boolean isDirectory()
功能:判断File对象表示的是否为文件夹,是返回true,否返回false。
注意事项:如果构造方法传递的路径不存在直接返回false。
File类中判断功能方法实例:
package demo01;
import java.io.File;
/**
* File类中判断功能的方法
*/
public class Demo04File {
public static void main(String[] args) {
exists();
System.out.println();
isFile();
System.out.println();
isDirectory();
}
/*
exists():判断File对象表示的文件或者文件夹是否存在,即判断构造方法中传递的路径是否存在。
*/
public static void exists(){
// 以绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src\\File类.txt"); //File对象为文件并且存在
File f2 = new File("E:\\java\\javaCourse\\File\\src\\a.txt"); //File对象为文件并且不存在
File f3 = new File("E:\\java\\javaCourse\\File\\src"); //File对象为文件夹并且存在
File f4 = new File("E:\\java\\javaCourse\\File\\directory"); //File对象为文件夹并且不存在
// 以相对路径创建File对象
File f5 = new File("src\\File类.txt"); //File对象为文件并且存在
File f6 = new File("src\\a.txt"); //File对象为文件并且不存在
File f7 = new File("src"); //File对象为文件夹并且存在
File f8 = new File("directory"); //File对象为文件夹并且不存在
//exists():判断File对象表示的文件或者文件夹是否存在,即判断构造方法中传递的路径是否存在。
boolean e1 = f1.exists();
boolean e2 = f2.exists();
boolean e3 = f3.exists();
boolean e4 = f4.exists();
boolean e5 = f5.exists();
boolean e6 = f6.exists();
boolean e7 = f7.exists();
boolean e8 = f8.exists();
//输出结果
System.out.println("e1 = " + e1); //e1 = true
System.out.println("e2 = " + e2); //e2 = false
System.out.println("e3 = " + e3); //e3 = true
System.out.println("e4 = " + e4); //e4 = false
System.out.println("e5 = " + e5); //e5 = true
System.out.println("e6 = " + e6); //e6 = false
System.out.println("e7 = " + e7); //e7 = true
System.out.println("e8 = " + e8); //e8 = false
}
/*
isFile:判断File对象表示的是否为文件,是返回true,否返回false。
*/
public static void isFile(){
// 以绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src\\File类.txt"); //File对象为文件并且存在
File f2 = new File("E:\\java\\javaCourse\\File\\src\\a.txt"); //File对象为文件并且不存在
File f3 = new File("E:\\java\\javaCourse\\File\\src"); //File对象为文件夹并且存在
File f4 = new File("E:\\java\\javaCourse\\File\\directory"); //File对象为文件夹并且不存在
// 以相对路径创建File对象
File f5 = new File("src\\File类.txt"); //File对象为文件并且存在
File f6 = new File("src\\a.txt"); //File对象为文件并且不存在
File f7 = new File("src"); //File对象为文件夹并且存在
File f8 = new File("directory"); //File对象为文件夹并且不存在
//isFile:判断File对象表示的是否为文件,是返回true,否返回false。
boolean i1 = f1.isFile();
boolean i2 = f2.isFile();
boolean i3 = f3.isFile();
boolean i4 = f4.isFile();
boolean i5 = f5.isFile();
boolean i6 = f6.isFile();
boolean i7 = f7.isFile();
boolean i8 = f8.isFile();
//输出结果
System.out.println("i1 = " + i1); //i1 = true
System.out.println("i2 = " + i2); //i2 = false
System.out.println("i3 = " + i3); //i3 = false
System.out.println("i4 = " + i4); //i4 = false
System.out.println("i5 = " + i5); //i5 = true
System.out.println("i6 = " + i6); //i6 = false
System.out.println("i7 = " + i7); //i7 = false
System.out.println("i8 = " + i8); //i8 = false
}
/*
isDirectory:判断File对象表示的是否为文件夹,是返回true,否返回false。
*/
public static void isDirectory(){
// 以绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src\\File类.txt"); //File对象为文件并且存在
File f2 = new File("E:\\java\\javaCourse\\File\\src\\a.txt"); //File对象为文件并且不存在
File f3 = new File("E:\\java\\javaCourse\\File\\src"); //File对象为文件夹并且存在
File f4 = new File("E:\\java\\javaCourse\\File\\directory"); //File对象为文件夹并且不存在
// 以相对路径创建File对象
File f5 = new File("src\\File类.txt"); //File对象为文件并且存在
File f6 = new File("src\\a.txt"); //File对象为文件并且不存在
File f7 = new File("src"); //File对象为文件夹并且存在
File f8 = new File("directory"); //File对象为文件夹并且不存在
//isFile:判断File对象表示的是否为文件,是返回true,否返回false。
boolean i1 = f1.isDirectory();
boolean i2 = f2.isDirectory();
boolean i3 = f3.isDirectory();
boolean i4 = f4.isDirectory();
boolean i5 = f5.isDirectory();
boolean i6 = f6.isDirectory();
boolean i7 = f7.isDirectory();
boolean i8 = f8.isDirectory();
//输出结果
System.out.println("i1 = " + i1); //i1 = false
System.out.println("i2 = " + i2); //i2 = false
System.out.println("i3 = " + i3); //i3 = true
System.out.println("i4 = " + i4); //i4 = false
System.out.println("i5 = " + i5); //i5 = false
System.out.println("i6 = " + i6); //i6 = false
System.out.println("i7 = " + i7); //i7 = true
System.out.println("i8 = " + i8); //i8 = false
}
}
实例运行结果:
e1 = true
e2 = false
e3 = true
e4 = false
e5 = true
e6 = false
e7 = true
e8 = false
i1 = true
i2 = false
i3 = false
i4 = false
i5 = true
i6 = false
i7 = false
i8 = false
i1 = false
i2 = false
i3 = true
i4 = false
i5 = false
i6 = false
i7 = true
i8 = false
七、File类中创建删除功能的方法
7.1、public boolean createNewFile()
功能:当且仅当具有该文件名称的文件不存在时,根据构造方法传递的路径创建一个新的文件。创建文件的路径和名称在构造方法传递的参数中。
返回值:boolean类型
true:文件不存在,创建文件,返回true
false:文件存在,不会创建文件,返回false
注意事项:
该方法只能创建文件,不能创建文件夹
创建文件的路径必须存在,否则会抛出异常
调用该方法后需要throws或者try catch
7.2、public boolean mkdir()
功能:创建单级空文件夹,创建文件的路径和名称在构造方法传递的参数中。
返回值:boolean类型
true:文件夹不存在,创建单级文件夹,返回true
false:文件夹存在或者路径不存在,不会创建单级文件夹,返回false
注意事项:
该方法只能创建单级文件夹,不能创建文件或者多级文件夹
7.3、public boolean mkdirs()
功能:创建单级或者多级空文件夹,创建文件的路径和名称在构造方法传递的参数中。
返回值:boolean类型
true:文件夹不存在,创建单级或者多级文件夹,返回true
false:文件夹存在,不会创建单级或者多级文件夹,返回false
注意事项:
该方法能创建单级或者多级文件夹,不能创建文件
7.4、public boolean delete()
功能:删除有File对象表示的文件或者文件夹,删除文件或者文件夹的路径和名称在构造方法传递的参数中。
返回值:boolean类型
true:文件或者文件夹删除成功,返回true
false:文件夹中有文件会删除失败返回false,构造方法传递的路径不存在返回false。
注意事项:
该方法是直接删除硬盘中的文件或者文件夹,不走回收站,因此删除需谨慎
该方法在删除文件夹时只能删除一级文件夹。
File类中创建删除功能的方法实例:
package demo01;
import java.io.File;
import java.io.IOException;
/**
* File类中创建与删除的方法
*/
public class Demo05File {
public static void main(String[] args) {
createNewFile();
System.out.println();
mkDirectory();
System.out.println();
delete();
}
/*
createNewFile():根据构造方法传递进来的文件路径创建文件
*/
public static void createNewFile(){
//根据绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src\\demo01\\a.txt");
//根据相对路径创建File对象
File f2 = new File("src\\demo01\\b.txt");
//createNewFile():根据构造方法传递进来的文件路径创建文件
try {
boolean c1 = f1.createNewFile();
boolean c2 = f2.createNewFile();
// 输出结果
System.out.println("c1 = " + c1);
System.out.println("c2 = " + c2);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
mkDirectory():创建文件夹
*/
public static void mkDirectory(){
//根据绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src\\aaa"); // 一级文件夹
File f2 = new File("E:\\java\\javaCourse\\File\\src\\111\\222"); // 多级文件夹
//根据相对路径创建File对象
File f3 = new File("src\\bbb"); //一级文件夹
File f4 = new File("src\\333\\444"); //多级文件夹
// mkdir():创建一级文件夹
boolean d1 = f1.mkdir();
boolean d3 = f3.mkdir();
//mkdirs():创建多级文件夹
boolean d2 = f2.mkdirs();
boolean d4 = f4.mkdirs();
// 输出是否创建成功标志
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);
System.out.println("d4 = " + d4);
}
/*
delete():删除文件或者文件夹
*/
public static void delete(){
//根据绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src\\demo01\\a.txt"); // 末尾为文件
File f2 = new File("E:\\java\\javaCourse\\File\\src\\111\\222"); // 末尾为文件夹
//根据相对路径创建File对象
File f3 = new File("src\\demo01\\b.txt"); // 末尾为文件
File f4 = new File("src\\bbb"); // 末尾为文件夹
//delete():删除文件或者文件夹
boolean d1 = f1.delete();
boolean d2 = f2.delete();
boolean d3 = f3.delete();
boolean d4 = f4.delete();
//输出删除结果
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);
System.out.println("d4 = " + d4);
}
}
实例运行结果:
c1 = true
c2 = true
d1 = false
d2 = true
d3 = true
d4 = false
d1 = true
d2 = true
d3 = true
d4 = true
八、File类中遍历文件夹的方法
8.1、public String[] list()
功能:返回一个String数组,为File对象下的所有子文件夹和子文件,构造方法中给出需要遍历的文件夹,会将该文件夹下的所有
文件或者文件夹存储到一个String数组中返回。
注意事项:
调用该方法返回的只是该文件夹下的子文件和文件夹,不能返回子文件夹下的文件或者文件夹
构造方法中传递的只能文件夹不能是文件,当传递的参数为文件上会报异常
该方法返回的String数组中的元素只是文件或者文件夹名称,不是路径
8.2、public File[] listFiles()
功能:返回一个File数组,为File对象下的所有子文件夹和子文件的File对象,构造方法中给出需要遍历的文件夹,会将该文件夹下的
所有文件或者文件夹创建为File对象存储到一个File数组中返回。
注意事项:
调用该方法返回的只是该文件夹下的子文件和文件夹,不能返回子文件夹下的文件或者文件夹
构造方法中传递的只能文件夹不能是文件,当传递的参数为文件上会报异常
该方法返回的File数组中的元素是根据父File对象拼接而成的完整File对象
File类中变量方法实例:
package demo01;
import java.io.File;
/**
* File类中遍历文件夹功能
*/
public class Demo06File {
public static void main(String[] args) {
list();
}
/*
list():遍历文件夹
*/
public static void list(){
//根据绝对路径创建File对象
File f1 = new File("E:\\java\\javaCourse\\File\\src");
//根据相对路径创建File对象
File f2 = new File("src");
//list():获取File对象文件夹中的所有文件夹和文件,并作为String数组返回
String[] l1 = f1.list();
String[] l2 = f2.list();
//使用增强for循环输出所有结果
for (String s: l1){
System.out.println(s);
}
System.out.println();
for (String s: l2){
System.out.println(s);
}
//listFiles():获取File对象文件夹中的所有文件夹和文件,并作为File数组返回
File[] file_list1 = f1.listFiles();
File[] file_list2 = f2.listFiles();
System.out.println();
// 使用增强for循环输出结果
for (File f: file_list1){
System.out.println(f);
}
System.out.println();
for (File f: file_list2){
System.out.println(f);
}
}
}
实例运行结果:
111
333
aaa
demo01
File类.txt
111
333
aaa
demo01
File类.txt
E:\java\javaCourse\File\src\111
E:\java\javaCourse\File\src\333
E:\java\javaCourse\File\src\aaa
E:\java\javaCourse\File\src\demo01
E:\java\javaCourse\File\src\File类.txt
src\111
src\333
src\aaa
src\demo01
src\File类.txt