目录
一、概述
二、File 构造方法
三、File 常见成员方法
1. 判断与获取
2. 创建与删除
3. 获取并遍历
四、 综合练习
1. 练习一 : 创建文件
2. 练习二 :单个文件夹查找文件
3. 练习三 :遍历硬盘查找文件
4. 练习四 :删除文件夹
5. 练习五 :统计文件夹大小
6. 练习六 :统计各种文件数量
扩展知识: 路径:
- 绝对路径:带盘符的。
- 相对路径:不带盘符的,默认到当前项目下去找。
方法名称 | 说明 |
public File ( String pathname ) | 根据文件路径创建文件对象 |
public File ( String parent,String child ) | 根据父路径名字符串和子路径名字符串创建文件对象 |
public File ( File parent,String child ) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
public class FileDemo01 {public static void main(String[] args) {// 1.根据字符串表示的路径// 变成File对象String str = "C:\\Users\\alienware\\Desktop\\a.txt";File f1 = new File(str);System.out.println(f1); // C:\Users\alienware\Desktop\a.txt// 将字符串变成File对象 就可以使用File对象方法// 2.根据父路径和子路径名称创建文件对象// 父路径:C:\Users\alienware\Desktop// 子路径:a.txtString parent = "C:\\Users\\alienware\\Desktop";String child = "a.txt";File f2 = new File(parent, child);System.out.println(f2); // C:\Users\alienware\Desktop\a.txt// \:转义字符File f3 = new File(parent + "\\" + child);// 3.把一个File表示的路径和String表示路径进行拼接File parent2 = new File("C:\\Users\\alienware\\Desktop");String child2 = "a.txt";File f4 = new File(parent2, child2);System.out.println(f4);}
}
方法名称 | 说明 |
public boolean isDirectory ( ) | 判断此路径名表示的File是否为文件夹 |
public boolean isFile ( ) | 判断此路径名表示的File是否为文件 |
public boolean exists ( ) | 判断此路径名表示的File是否存在 |
public long length ( ) | 返回文件的大小(字节数量) |
public string getAbsolutePath ( ) | 返回文件的绝对路径 |
public string getPath ( ) | 返回定义文件时使用的路径 |
public string getName ( ) | 返回文件的名称,带后缀 |
public long lastModified ( ) | 返回文件的最后修改时间(时间毫秒值) |
判断:
public class FileDemo02 {public static void main(String[] args) {//1.对文件的路径进行判断File f1 = new File("D:\\aaa\\a.txt");System.out.println(f1.isDirectory()); //falseSystem.out.println(f1.isFile()); //trueSystem.out.println(f1.exists()); //true//2.对文件夹的路径进行判断File f2 = new File("D:\\aaa\\bbb");System.out.println(f1.isDirectory()); //trueSystem.out.println(f1.isFile()); //falseSystem.out.println(f1.exists()); //true//3.对不存在的路径进行判断File f3 = new File("D:\\aaa\\c.txt");System.out.println(f1.isDirectory()); //falseSystem.out.println(f1.isFile()); //falseSystem.out.println(f1.exists()); //false}
}
获取:
public class FileDemo03 {public static void main(String[] args) {// 1.length 返回文件大小// 细节: 方法只能返回文件大小,单位是字节// 方法无法获取文件夹大小// 如果想要获取文件夹大小,需要将文件夹内所有文件大小进行累加File f1 = new File("D:\\aaa\\a.txt"); // 文件中有四个字long len = f1.length();System.out.println(len); // 12 (个字节)File f2 = new File("D:\\aaa\\bbb");long len2 = f2.length();System.out.println(len2); // 0// 2.getAbsolutePath 返回文件绝对路径File f3 = new File("D:\\aaa\\a.txt");String path1 = f3.getAbsolutePath();System.out.println(path1); // D:\aaa\a.txt// 当前路径下File f4 = new File("java02\\a.txt");String path2 = f4.getAbsolutePath();System.out.println(path2); // C:\Users\123456\eclipse-workspace\java02\java02\a.txt// 3.getPath 返回定义文件时使用的路径File f5 = new File("D:\\aaa\\a.txt");String path3 = f5.getPath();System.out.println(path3); // D:\aaa\a.txt// 当前路径下File f6 = new File("java02\\a.txt");String path4 = f6.getPath();System.out.println(path4); // java02\a.txt// 4.getName 获取文件名// a :真正文件名// txt : 文件扩展名File f7 = new File("D:\\aaa\\a.txt");String name = f7.getName();System.out.println(name); // a.txt// 5.lastModified 返回文件最后修改时间File f8 = new File("D:\\aaa\\a.txt");long time = f8.lastModified();System.out.println(time); // 1667380952425 (毫秒值)}
}
方法名称 | 说明 |
public boolean createNewFile ( ) | 创建一个新的空的文件 |
public boolean mkdir ( ) | 创建单级文件夹 |
public boolean mkdirs ( ) | 创建多级文件夹 |
public boolean delete ( ) | 删除文件、空文件夹 |
注意:delete()方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站。
public class FileDemo04 {public static void main(String[] args) throws IOException {// 1. createNewFile 创建新的空的文件// 细节1:如果当前路径表示文件时不存在的,则创建成功,返回true; 否则,返回false// 细节2:如果父路径不存在,那么方法会有异常// 细节3:创建的一定是文件,如果路径不包含后缀名,则是一个没有后缀的文件File f1 = new File("D:\\aaa\\c.txt");boolean b1 = f1.createNewFile();System.out.println(b1);// 2.mkidr 创建单级文件夹(目录)// 细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false// 细节2:只能创建单级文件夹,无法创建多级文件夹File f2 = new File("D:\\aaa\\ddd");boolean b2 = f2.mkdir();System.out.println(b2); // false// 3.mkidrs 创建多级文件夹// 细节: 既可以创建单级文件夹,也可以创建多级文件夹File f3 = new File("D:\\aaa\\aaa\\bbb\\ccc");boolean b3 = f3.mkdirs();System.out.println(b3); // true// 4.delete 删除文件、空文件夹// 细节: 如果删除的是文件,则直接删除,不走回收站// 如果删除的是空文件夹,则直接删除,不走回收站// 如果删除的是有内容的文件夹,则删除失败File f4 = new File("D:\\aaa\\a.txt");boolean b4 = f4.delete();System.out.println(b4);}
}
方法名称 | 说明 |
public File [ ] listFiles ( ) | 获取当前该路径下所有内容 |
注意:
- 当调用者File表示的路径不存在时,返回null。
- 当调用者File表示的路径是文件时,返回null。
- 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组。
- 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回。
- 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。
- 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null。
public class FileDemo05 {public static void main(String[] args) {//1.创建file对象File f = new File("D:\\aaa");//2.调用方法//作用:获取文件夹中所有内容,把所有的内容存放到数组并返回File[] files = f.listFiles();for (File file : files) {//file依次表示文件夹中的每一个文件或者文件夹System.out.println(file);}}
}
需求:在当前模块下的aaa文件夹中创建一个a.txt文件。(不需要考虑子文件夹)
public class FileTest {public static void main(String[] args) throws IOException {// 1.创建a.txt父级路径File file = new File("java02\\aaa");// 2.创建父级路径// 如果aaa是存在的,那么此时创建失败// 如果aaa是不存在的,那么此时创建成功file.mkdirs();// 3.拼接父级路径和子级路径File src = new File(file, "a.txt");boolean b = src.createNewFile();if (b) {System.out.println("创建成功");} else {System.out.println("创建失败");}}
}
需求:定义一个方法找某一个文件夹中。是否有以avi结尾的电影。
public class FileTest {public static void main(String[] args) throws IOException {File file = new File("D:\\aaa");boolean b = haveAvi(file);System.out.println(b);}//作用: 用来找某个文件夹中,是否有以avi结尾的电影//形参: 要查找的文件夹//返回值:查找的结果public static boolean haveAvi(File file) {//1.进入文件夹,获取其中的所有的内容File[] files = file.listFiles();for (File f : files) {if (f.isFile() && f.getName().endsWith(".avi")) {return true;}}//循环结束,仍未找到return false;}
}
需求:找到电脑中所有以avi结尾的电影。(需要考虑子文件夹)
public class FileTest {public static void main(String[] args) throws IOException {File src = new File("C:\\");findAvi(src);}public static void findAvi() {// 获取本地所有的盘符File[] arr = File.listRoots();for (File f : arr) {findAvi(f);}}public static void findAvi(File file) {// 1.进入文件夹File[] files = file.listFiles();// 2.遍历数组 得到file中每一个文件或文件夹if (files != null) {for (File f : files) { // files 可能为空指针if (f.isFile()) {// 3.判断: 是文件,执行业务逻辑String name = f.getName();if (name.endsWith(".avi")) {System.out.println(f);}} else {// 4.判断: 是文件夹,就可以递归// 细节: 再次调用方法,参数必须是file的次一级findAvi(f);}}}}
}
需求:删除一个多级文件夹。
public class FileTest {public static void main(String[] args) {// 如果我们想要删除一个含有内容的文件夹?// 1.先删除文件夹里面的所有的内容// 2.再删除文件夹自己File file = new File("D:\\aaa\\src");delete(file);// delete 只能删除文件和空的文件夹}// 作用:删除src文件夹// 参数 : 要删除的文件夹public static void delete(File src) {// 1.先删除文件夹内所有文件File[] files = src.listFiles();for (File file : files) {if (file.isFile()) {file.delete();} else {delete(file);}}// 2.再删除文件夹自己src.delete();}
}
需求:统计一个文件夹的总大小。
public class FileTest {public static void main(String[] args) {File file = new File("D:\\aaa\\src");long len = getLen(file);System.out.println(len);}//作用:统计一个文件夹的大小//形参: 要统计的文件夹//返回值: 文件夹大小public static long getLen(File src) {long len = 0;File[] files= src.listFiles();for(File file : files) {if (file.isFile()) {len = len + file.length();}else {len = len + getLen(file);}}return len;}
}
需求:需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
打印格式如下:
- txt:3个
- doc:4个
- jpg:6个
public class FileTest {public static void main(String[] args) {// 统计 : 计数器思想File file = new File("D:\\aaa\\src");Map hm = getCount(file);System.out.println(hm);}// 作用:统计一个文件夹中每种文件的个数// 形参: 要统计的文件夹// 返回值: 以用来统计的map集合(键:后缀名 值:次数)public static Map getCount(File src) {// 定义集合用来统计HashMap hm = new HashMap<>();// 进入src文件夹File[] files = src.listFiles();// 遍历for (File file : files) {if (file.isFile()) {String name = file.getName();String[] arr = name.split("\\.");if (arr.length >= 2) {String endName = arr[arr.length - 1];if (hm.containsKey(endName)) {// 存在int count = hm.get(endName);count++;hm.put(endName, count);} else {// 不存在hm.put(endName, 1);}}} else {// sonMap开麦女士子文件中每一种文件的个数Map sonMap = getCount(file);Set> entries = sonMap.entrySet();for (Map.Entry entry : entries) {String key = entry.getKey();int value = entry.getValue();if (hm.containsKey(key)) {// 存在int count = hm.get(key);count = count + value;hm.put(key, count);} else {// 不存在hm.put(key, value);}}}}return hm;}
}
上一篇:一、JVM入门介绍