File
介绍
File是java.io.包下的类, File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。
创建File类的对象
- File对象既可以代表文件、也可以代表文件夹。
- File封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的。
目标:掌握File对象的创建
//构造方法:
File(String pathname)://根据文件路径创建文件对象
File(String parent, String child)://根据父路径名字符串和子路径名字符串创建文件对象
File(File parent, String child)://根据父路径对应文件对象和子路径名字符串创建文件对象
//1.创建File对象,代表:C:\Users\志\Desktop\test\a.txt 文件
File aFile = new File("C:\\Users\\志\\Desktop\\test\\a.txt");
//File对象封装的就是文件\文件夹路径
System.out.println(aFile);
//2.创建File对象,代表:C:\Users\志\Desktop\test
File testFile = new File("C:\\Users\\志\\Desktop", "test");
System.out.println(testFile);
//3.创建File对象,代表:C:\Users\志\Desktop\test\b.txt (此时文件不存在)
File bFile = new File(testFile, "b.txt");
System.out.println(bFile);
注意:从盘符开始的路径都叫绝对路径。还有一种叫相对路径!
//4.相对路径:如果创建的File对象代表当前项目中的某个文件\文件夹,就可以使用相对路径。因为相对的是当前项目的路径
//需求:创建File对象,代表当前模块下的配置文件day09.iml
//File f = new File("D:\\WorkSpace\\IdeaProjects\\se-code\\day09\\day09.iml");
File f = new File("day09\\day09.iml");
System.out.println(f);
小结
- File类构建对象的方式是什么样的?File的对象可以代表哪些东西?
File file = new File(“文件/文件夹/绝对路径/相对路径”);
- 绝对路径和相对路径是什么意思?
绝对路径是带盘符的。
相对路径是不带盘符的,默认到当前工程下寻找文件。
常用方法
- File提供的判断文件类型、获取文件信息功能
//public boolean exists():判断File对应的文件/文件夹在硬盘上是否存在
File aFile = new File("C:\\Users\\志\\Desktop\\test\\a.txt");
boolean r1 = aFile.exists();
System.out.println(r1);
//public boolean isFile():判断File对应的是否是文件
boolean r3 = aFile.isFile();
System.out.println(r3);
//public boolean isDirectory():判断File对应的是否是文件夹
boolean r5 = aFile.isDirectory();
System.out.println(r5);
//public String getName():获取文件名,包含后缀
String aName = aFile.getName();
System.out.println(aName);
//public long length():获取文件的长度(注意:只能让文件去调用!如果调用方法的是文件夹,则结果不准确)
long aLength = aFile.length();
System.out.println(aLength);
//public long lastModified():返回文件的上一次修改时间的时间毫秒值
long aTime = aFile.lastModified();
System.out.println(aTime);
//可以使用SimpleDateFormat将时间毫秒值转成指定格式的字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(aTime);
System.out.println(str);
//public String getPath():获取创建File对象时提供的路径
String aPath = aFile.getPath();
System.out.println(aPath);
//public getAbsolutePath():获取绝对路径
String fAbsolutePath = f.getAbsolutePath();
System.out.println(fAbsolutePath);
- File类创建文件的功能
目标:掌握文件创建和删除功能的使用
//1.需求:在 C:\Users\志\Desktop\test 下创建 b.txt 文件
File bFile = new File("C:\\Users\\\\Desktop\\test\\b.txt");
boolean r1 = bFile.createNewFile();
System.out.println("b.txt是否创建成功:" + r1);
//需求:在 C:\Users\志\Desktop\test\resource下创建a和b文件夹,其中b在a中!
//注意:此时a和b都不存在,是多级文件夹
File bDirectoryFile = new File("C:\\Users\\志\\Desktop\\test\\resource\\a\\b");
//尝试用单级文件夹创建
boolean r3 = bDirectoryFile.mkdir();
System.out.println("a和b文件夹是否创建成功:" + r3);
//尝试用多级文件夹创建
boolean r4 = bDirectoryFile.mkdirs();
System.out.println("a和b文件夹是否创建成功:" + r4);
//4.需求:在 C:\Users\志\Desktop\test\resource 下创建c文件夹
File cFile = new File("C:\\Users\\志\\Desktop\\test\\resource\\c");
//尝试用mkdirs创建单级
boolean r5 = cFile.mkdirs();
System.out.println("c文件夹是否创建成功:" + r5);
//结论:不管是创建单级还是多级,都建议使用mkdirs方法!
- File类删除文件的功能
(注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站.)
//5.需求:删除b.txt文件
boolean r6 = bFile.delete();
System.out.println("b.txt文件是否删除成功:" + r6);
//6.需求:删除resource文件夹
boolean r7 = resourceFile.delete();
System.out.println("resource文件夹是否删除成功:" + r7); //删除失败:因为文件夹不是空的!
//7.需求:删除b文件夹
boolean r8 = bDirectoryFile.delete();
System.out.println("b文件夹是否删除成功:" + r8);
//注意:删除的文件不走回收站!
- File类提供的遍历文件夹的功能
//1.需求:遍历 C:\Users\志\Desktop\test 文件夹,拿到它的一级路径下的所有文件/文件夹名字
File testFile = new File("C:\\Users\\志\\Desktop\\test");
String[] testListName = testFile.list();
System.out.println(Arrays.toString(testListName));
使用listFiles方法时的注意事项:
当主调是文件,或者路径不存在时,返回null
当主调是空文件夹时,返回一个长度为0的数组
当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
案例
需求:从D:盘中,搜索“QQ.exe” 这个文件,找到后直接输出其位置。
分析:
先找出D:盘下的所有一级文件对象
遍历全部一级文件对象,判断是否是文件
如果是文件,判断是否是自己想要的
如果是文件夹,需要继续进入到该文件夹,重复上述过程
/**
* 定义方法:从指定的文件夹中查询指定的文件
* 明确参数:File 要查询的文件夹,String 要查询的文件名,ArrayList 存储查询到的文件
* 明确返回值:查到的文件都放到了集合中,所以不需要返回值
*/
public static void findFileByName(File src, String name, ArrayList<File> list) {
//遍历src这个文件夹,拿到它的一级文件
File[] files = src.listFiles();
//判断files是否为null(防止src没有权限,或者是一个文件!)
if (files != null) {
//遍历files
for (File file : files) {
//判断file是否是文件
if (file.isFile()) {
//是文件,就获取名字,进行对比
if (file.getName().equals(name)) {
//找到了,把文件存入集合
list.add(file);
}
} else {
//是文件夹,进入继续寻找,还是上面的逻辑!开始递归,查询file
findFileByName(file, name, list);
}
}
}
}
public static void main(String[] args) {
//1.键盘录入要查询的文件名
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\n");
System.out.println("请输入文件名:");
String fileName = sc.next();
System.out.println("请输入要查询的文件夹:");
String path = sc.next();
//调用方法
ArrayList<File> list = new ArrayList<>();
findFileByName(new File(path), fileName, list);
//判断是否查到
if (list.size() == 0) {
System.out.println("没有找到指定文件!");
} else {
for (File file : list) {
System.out.println(file);
}
}