概述:
java中对文本文件这种事物的一种描述的类,定义一些可以操作文本文件的功能和属性
一个文件文件的路径对应就有一个File对象,这个File文件对象就 可以操作对应路径的文件本身
文本文件和File文件对象有关系的:
File对象是对文本文件的一种虚拟化【File对象存在对应的文本文件不一定存在】
File对象是通过文件的路径创建出来的
路径:
绝对路径:
包含磁盘根目录的全路径 比如: C:\a\b.txt
相对路径:
以一个固定的路径为参考得到的部分路径
比如:以c:\a 路径为参考 b.txt就是相对路径
工程项目相对于工程路径 可以使用相对路径
File的构造方法
1、File(String path):
创建一个以path路径为目标文件的文件对象
2、File(String parent, String child):
创建一个以parent+child拼接后的路径为目标文件的文件对象
3、File(File file, String child):
创建一个以file文件对象的路径+child拼接后的路径为目标文件的 文件对象
File的创建方法
概述:
得到File的对象对应有一个文本文件,使用对象调用创建文本文件的功能,在对应的路径下创建出来对应的文本文件
给定的路径是要计划操作的文本文件【有可能不存在】的路径。
只要给我一个路径就可以先得到一个File对象,对象就可以调用相关功能在磁盘当中创建对应的文本文件。
注意:
File对象存在和文本文件是否存在没有关系。
功能:
1、boolean createNewFile():
创建调用对象对应路径的文本文件。
注意事项:
被调用的时候确保文件所在的目录必须在磁盘中存在
2、boolean mkdir():
创建单级文件夹【就是一个文件夹】
注意事项:
被调用的时候确保文件所在的目录必须在磁盘中存在
3、boolean mkdirs():
创建多级文件夹【多个文件夹】
代码示例:
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
//获取文件对象,方式一:
File file = new File("a"); //相对路径
System.out.println(file);
//获取文件对象,方式二
File file3 = new File(file, "b/c");
System.out.println(file3);
//获取文件对象,方式三
File file4 = new File("b","c/d");
System.out.println(file4);
// 想要操作那个文件 先得到该文件的File对象,得到HelloWord.txt文件对象
File file2 = new File(file, "HelloWorld.txt");
//调用createNewFile,创建调用对象对应路径的文本文件
boolean cnf = file2.createNewFile();
System.out.println("创建文件" + cnf);
//创建单级文件夹
boolean m = file.mkdir(); //成功 true 反之 false
System.out.println("创建单级文件夹" + m);
//创建多级文件夹
boolean m2 = file3.mkdirs();
System.out.println("创建多级文件夹" + m2);
boolean m3 = file4.mkdirs();
System.out.println("创建多级文件夹" + m3);
}
}
File功能
File 的删除功能
delete():
删除磁盘中对应的文本文件
注意:
1、只能删除空的文件夹
2、删除不走回收站
代码示例:
import java.io.File;
public class FileDemo02 {
public static void main(String[] args) {
//创建要操作的文件的File对象
File file = new File("b/c");
//创建文件夹
file.mkdirs();
//删除
boolean del = file.delete(); //删除不走回收站
System.out.println(del);
File file2 = new File("b/c/d");
//创建文件夹
file.mkdirs();
File file3 = new File("b");
//删除
boolean del2 = file3.delete(); //删除的文件夹必须为空
System.out.println(del2);
}
}
File的重命名(或剪切)方法
renameTo(File dest):
使用场景:
同一个文件夹下:重命名的功能
不在同一个文件夹下:剪切功能, 可以剪切并重命名
代码示例:
import java.io.File;
public class FileRenameToDemo {
public static void main(String[] args) {
//创建要操作的文件夹的File对象
File file = new File("a/a.txt");
File file2 = new File("a/b.txt");
//同文件夹下重命名
boolean rt = file.renameTo(file2);
System.out.println(rt);
//创建不同文件夹的File对象
File file3 = new File("a/c.txt");
File file4 = new File("b/c.txt");
//不同文件夹下是剪切功能
boolean rt2 = file3.renameTo(file4);
System.out.println(rt2);
}
}
File的判断功能
1、exists():
判断调用对象对应的文本文件是否在磁盘中存在
2、isFile():
判断调用对象对应的文本文件是不是文件
3、isDirectory():
判断调用对象对应的文本文件是不是文件夹
注意:
isFile和isDirectory方法调用的时候要确保file对象对应的文件在磁盘中存在才有意义
代码示例:
import java.io.File;
public class FileEqualsDemo {
public static void main(String[] args) {
//创建要操作的文件的File对象
File file = new File("a"); //文件夹存在
File file1 = new File("a/b/c/d"); //不存在
File file2 = new File("a/b.txt"); //记事本文件存在
File file3 = new File("b/c"); //问价夹存在
//判断路径是否存在
boolean boo1 = file.exists();
System.out.println(boo1); //true
boolean boo2 = file1.exists();
System.out.println(boo2);//fasle
//判断调用对象对应的文本文件是不是文件
boolean boo3 = file2.isFile();
System.out.println(boo3);//true
//判断调用者对象对应的文件是不是文件夹
boolean boo4 = file3.isDirectory();
System.out.println(boo4);//true
}
}
File的获取功能
1、getAbsolutePath():
获取文件对象的绝对路径
2、getPath():
获取构造方法传入的路径 ( 工程中传入的路径是什么,获取的就是什么)
3、getName():
获取文件对象的文件名 ( 获取到的只是单纯的文件名)
文件对象的名:包含包路径的全限定类名
但是这个方法获取的是不包含包路径的文件名
4、length():
获取文件中内容的长度,单位字节
使用场景:
主要是给文件的File对象调用的,文件夹对象调用没有意义。
文件夹没有大小【大小根据内部文件的大小决定】
5、String[] list():
获取文件夹下所有文本文件的文件名,返回值是一个字符串数组
6、File[] listFiles():
获取文件夹下所有文本文件的File对象,返回值是一个File数组
代码示例:
import java.io.File;
import java.util.Arrays;
public class FileDemo3 {
public static void main(String[] args) {
//创建要操作的File对象
File file = new File("a/b.txt");
//获取文件对象的绝对路径
File file2 = file.getAbsoluteFile();
System.out.println(file2); //E:\a\b.txt
//获取构造方法传入的路径
System.out.println(file.getPath()); //a\b.txt
//获取文件对象的文件名
System.out.println(file.getName()); //b.txt
//获取文件中内容的长度(文件大小的字节数)
System.out.println(file.length()); //99
//获取文件夹下所有文本文件的文件名,返回值是一个字符串数组
File file3 = new File("a");
String[] list = file3.list();
//遍历数组
System.out.println(Arrays.toString(list)); //[b.txt, 新建文件夹, 新建文件夹 (2), 新建文件夹 (3)]
//获取文件夹下所有文本文件的File对象,返回值是一个File数组
File[] file4 = file3.listFiles();
for (File file5 : file4) {
System.out.print(file5 + " "); //a\b.txt a\新建文件夹 a\新建文件夹 (2) a\新建文件夹 (3)
}
}
}
获取功能的练习
键盘录入一个字符串,表示一个文件夹路径,如果不是文件夹路径则提示重新录入,并打印此文件夹下所有大于20M的后缀名为.mp4的文件名
是文件夹:
分析:
【重复录入的过程 肯定使用while循环】
判断录入的路径是不是文件夹路径【循环体判断】
把路径变为文件File对象 调用isDirectory方法判断
是【true】:
1、打印当前文件夹下,所有的大于 50M 的后缀名是.mp4 的文件的文件名
①、获取所有的文件的File对象
②、遍历获取到大的File对象的数组得到单个File对象【录入的文件夹下文件的File对象】
③、判断File对象是不是文件
是:
1、分别获取大小和名称
2、判断大小是否大于50M同时名称是不是.mp4结尾
满足:打印文件名
2、停止录入【break】
不是【false】:
提示不对重新录入
代码示例:
import java.io.File;
import java.util.Scanner;
/**
*键盘录入一个字符串,表示一个文件夹路径,
*如果不是文件夹路径则提示重新录入
* 并打印此文件夹下所有大于20M的后缀名为.mp4的文件名
*/
public class Demo01 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner scanner = new Scanner(System.in);
//通过while循环进行循环录入
while (true) {
System.out.println("请输入一个文件夹路径: ");
String str = scanner.nextLine();
//获取录入的路径,创建File对象
File file = new File(str);
//判断录入的是否为文件夹
if (file.isDirectory()) {
//如果存在,则获取当前文件夹下所有的文件对象
File[] list1 = file.listFiles();
//遍历文件对象,找出所有问价大于50M并以.mp4结尾的文件
for (File file2 : list1) {
if (file2.length() > 50* 1024 * 1024 && file2.getName().endsWith(".mp4")) {
System.out.println(file2.getName());
}
}
break;
}else {
System.out.println("输入有误,请重新输入");
}
}
}
}