File类
一、对File类的理解
- File类是一个对象,代表一个文件或者是一个文件目录。
- File类声明在java.io包下。
- File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。
- File类的对象会常用在作为参数传递到流的构造器中,指明读或写的终点。
二、File的实例化
1.绝对路径和相对路径的理解
- 绝对路径:绝对路径就是从盘开始文件或文件目录的路径(如:E:\学习\IDEA练习)
- 相对路径:相对路径就是在指定的路径下的文件或文件夹(如:\IDEA练习)
2.常用构造器
File(String filePath):通过路径创建File
File(String parentPath,String childPath):通过父路径和子路径创建file
File(File parentPath,String childPath):通过父file和子路径创建file
具体实现如下代码:
//通过路径创建File
File f1=new File("E:\\学习\\io流操作文件夹\\1.txt");
//通过父路径和子路径File
File f2=new File("E:\\学习\\io流操作文件夹","javase");
//父File和子路径创建File
File fatherFile=new File("E:\\学习\\io流操作文件夹");
File childFile=new File(fatherFile,"2.txt");//"E:\学习\io流操作文件夹\2.txt"
3、FIle类的常用方法
createNewFile():创建文件,存在不创建
mkdir():创建单级文件夹
mkdirs():创建多级文件夹
具体使用如下:
File file=new File("E:\\学习\\io流操作文件夹"+File.separator+"1.txt");
//创建文件
file.createNewFile();
File folder=new File("E:\\学习\\io流操作文件夹\\demo");
//创建单级目录
System.out.println(folder.mkdir());//不存在创建返回true,存在返回false
File folder2=new File("E:\\学习\\io流操作文件夹\\text\\new");
//创建多级目录
folder2.mkdirs();
delete():删除File对象,只能删除文件或者空的文件夹
具体使用如下:
File folder2=new File("E:\\培训\\io流操作文件夹\\text\\new");
//创建多级目录
folder2.mkdirs();
//删除文件
file.delete();
//删除demo(空目录)
folder.delete();
//删除text(非空目录不能删除)
folder2.delete();
getAbsoultPath(): 获取绝对路径
getPath(): 将此File转换为路径名字符串,获取的构造方法中传递的路径
getName(): 获取文件或目录的名称名称
getParent(): 获取上层文件目录路径
length(): 获取字节数,文件夹没大小概念的
lastModified(): 获取最后一次修改时间的毫秒值
endsWith(): 获取后缀元素 如:fileName.endsWith(".java")//判断后缀是否是.java的
具体使用如下:
public static void main(String[] args) throws IOException {
File file=new File("io\\a.txt");
if(!file.exists()){
file.createNewFile();
}
//获取绝对路径
System.out.println(file.getAbsolutePath());//E:\培训\上课代码\io\a.txt
//判断是否是文件夹
System.out.println(file.isDirectory());//F
//判断是否是文件
System.out.println(file.isFile());//T
//判断是否可读
System.out.println(file.canRead());//T
//判断是否可写
System.out.println(file.canWrite());//T
//判断是否隐藏
System.out.println(file.isHidden());//F
//获取构造方法中传递的路径
System.out.println(file.getPath());//io\a.txt
//获取文件名称
System.out.println(file.getName());//a.txt
//获取文件上层目录路径
System.out.println(file.getParent());//io
}
String[] list(): 获取目录下所文件和文件夹的名称
File[] listFiles(): 获取目录下所文件和文件夹的File对象
具体使用如下:
//File[] listFiles()方法的使用
private static void demo2() {
File file=new File("C:\\Users\\mk\\Desktop\\demo");
//获取指定目录下所有文件或文件夹的File对象
File[] files=file.listFiles();
for (File f:files){
//输出绝对路径
System.out.println(f.getAbsolutePath());
}
}
//String[] list()方法的使用
private static void demo1() {
File file=new File("C:\\Users\\mk\\Desktop\\demo");
//获取指定目录下所有文件或文件夹的名称
String[] names=file.list();
for(String name:names){
System.out.println(name);
}
}
String[] list(filenameFilter): 通过指定的文件名称过滤器将不符合条件的文件过滤掉
File[] listFiles(filenameFilter): 通过指定的文件名称过滤器将不符合条件的文件过滤掉
File[] listFiles(FileFilter filter): 抽象方法:用来过滤文件的方法
String[] list(filenameFilter)的使用:
//指定后缀,将其所有文件输出到控制台
File folder=new File(".");//在主方法里生成的
private static void demo1(File folder) {
String[] names=folder.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file=new File(dir,name);
//判断file是否是文件
if(file.isDirectory()){
demo1(file);
return false;
}
//文件是否是.java文件
return name.endsWith(".java");
}
});
for(String name:names){
System.out.println(name);
}
}
File[] listFiles(filenameFilter)的使用:
private static void demo2(File folder) {
File[] files=folder.listFiles(new FilenameFilter() {//实例化一个过滤器
@Override
public boolean accept(File dir, String name) {
File file=new File(dir,name);
if(file.isDirectory()){
return true;
}
return name.endsWith(".java");
}
});
for (File name:files){
if(name.isDirectory()){//如果name是一个文件夹,递归
demo2(name);
}else {
System.out.println(name.getName());
}
}
}
File[] listFiles(FileFilter filter)的使用:
//删除指定的目录
private static void deleteDer(File folder) {
File[] files=folder.listFiles();
//判断当前的目录是否为空
if(files==null){
folder.delete();
}else {
//如果不是,就先删除目录下的文件
for (File file:files){
if(file.isFile()){
file.delete();
}else {
//如果不是文件的话,删除文件夹
deleteDer(file);
}
}
//最后删除目录
folder.delete();
}
}
renameTo(File dest):将一个File对象重名名为指定的File对象
//将文件重命名
private static void demo1() {
File file=new File("io\\a.txt");
File dext=new File("io\\aaa.txt");
file.renameTo(dext);
}