当前位置:   article > 正文

JAVA进阶 —— File_需求:删除一个多级文件夹 1、先删除文件夹里面所有的内容 2、再删除这个文件夹

需求:删除一个多级文件夹 1、先删除文件夹里面所有的内容 2、再删除这个文件夹

目录

一、概述

 二、File 构造方法

三、File 常见成员方法

1.  判断与获取

2. 创建与删除

3. 获取并遍历

四、 综合练习

1.  练习一 : 创建文件

2.  练习二 :单个文件夹查找文件

3.  练习三 :遍历硬盘查找文件

4.  练习四 :删除文件夹

 5.  练习五 :统计文件夹大小

6.  练习六 :统计各种文件数量


一、概述

  • File对象就表示一个路径,可以使文件的路径,也可以是文件夹的路径。
  • 这个路径可以是存在的,也可以是不存在的。

 扩展知识: 路径:

  • 绝对路径:带盘符的。
  • 相对路径:不带盘符的,默认到当前项目下去找。

 二、File 构造方法

方法名称说明
public File ( String pathname )根据文件路径创建文件对象
public File ( String parent,String child )根据父路径名字符串和子路径名字符串创建文件对象
public File ( File parent,String child )根据父路径对应文件对象和子路径名字符串创建文件对象
  1. public class FileDemo01 {
  2. public static void main(String[] args) {
  3. // 1.根据字符串表示的路径
  4. // 变成File对象
  5. String str = "C:\\Users\\alienware\\Desktop\\a.txt";
  6. File f1 = new File(str);
  7. System.out.println(f1); // C:\Users\alienware\Desktop\a.txt
  8. // 将字符串变成File对象 就可以使用File对象方法
  9. // 2.根据父路径和子路径名称创建文件对象
  10. // 父路径:C:\Users\alienware\Desktop
  11. // 子路径:a.txt
  12. String parent = "C:\\Users\\alienware\\Desktop";
  13. String child = "a.txt";
  14. File f2 = new File(parent, child);
  15. System.out.println(f2); // C:\Users\alienware\Desktop\a.txt
  16. // \:转义字符
  17. File f3 = new File(parent + "\\" + child);
  18. // 3.把一个File表示的路径和String表示路径进行拼接
  19. File parent2 = new File("C:\\Users\\alienware\\Desktop");
  20. String child2 = "a.txt";
  21. File f4 = new File(parent2, child2);
  22. System.out.println(f4);
  23. }
  24. }

三、File 常见成员方法

1.  判断与获取

方法名称说明
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 ( )返回文件的最后修改时间(时间毫秒值)

判断:

  1. public class FileDemo02 {
  2. public static void main(String[] args) {
  3. //1.对文件的路径进行判断
  4. File f1 = new File("D:\\aaa\\a.txt");
  5. System.out.println(f1.isDirectory()); //false
  6. System.out.println(f1.isFile()); //true
  7. System.out.println(f1.exists()); //true
  8. //2.对文件夹的路径进行判断
  9. File f2 = new File("D:\\aaa\\bbb");
  10. System.out.println(f1.isDirectory()); //true
  11. System.out.println(f1.isFile()); //false
  12. System.out.println(f1.exists()); //true
  13. //3.对不存在的路径进行判断
  14. File f3 = new File("D:\\aaa\\c.txt");
  15. System.out.println(f1.isDirectory()); //false
  16. System.out.println(f1.isFile()); //false
  17. System.out.println(f1.exists()); //false
  18. }
  19. }

获取:

  1. public class FileDemo03 {
  2. public static void main(String[] args) {
  3. // 1.length 返回文件大小
  4. // 细节: 方法只能返回文件大小,单位是字节
  5. // 方法无法获取文件夹大小
  6. // 如果想要获取文件夹大小,需要将文件夹内所有文件大小进行累加
  7. File f1 = new File("D:\\aaa\\a.txt"); // 文件中有四个字
  8. long len = f1.length();
  9. System.out.println(len); // 12 (个字节)
  10. File f2 = new File("D:\\aaa\\bbb");
  11. long len2 = f2.length();
  12. System.out.println(len2); // 0
  13. // 2.getAbsolutePath 返回文件绝对路径
  14. File f3 = new File("D:\\aaa\\a.txt");
  15. String path1 = f3.getAbsolutePath();
  16. System.out.println(path1); // D:\aaa\a.txt
  17. // 当前路径下
  18. File f4 = new File("java02\\a.txt");
  19. String path2 = f4.getAbsolutePath();
  20. System.out.println(path2); // C:\Users\123456\eclipse-workspace\java02\java02\a.txt
  21. // 3.getPath 返回定义文件时使用的路径
  22. File f5 = new File("D:\\aaa\\a.txt");
  23. String path3 = f5.getPath();
  24. System.out.println(path3); // D:\aaa\a.txt
  25. // 当前路径下
  26. File f6 = new File("java02\\a.txt");
  27. String path4 = f6.getPath();
  28. System.out.println(path4); // java02\a.txt
  29. // 4.getName 获取文件名
  30. // a :真正文件名
  31. // txt : 文件扩展名
  32. File f7 = new File("D:\\aaa\\a.txt");
  33. String name = f7.getName();
  34. System.out.println(name); // a.txt
  35. // 5.lastModified 返回文件最后修改时间
  36. File f8 = new File("D:\\aaa\\a.txt");
  37. long time = f8.lastModified();
  38. System.out.println(time); // 1667380952425 (毫秒值)
  39. }
  40. }

2. 创建与删除

方法名称说明
public boolean createNewFile ( )创建一个新的空的文件
public boolean mkdir ( )创建单级文件夹
public boolean mkdirs ( )创建多级文件夹
public boolean delete ( )删除文件、空文件夹

注意:delete()方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站

  1. public class FileDemo04 {
  2. public static void main(String[] args) throws IOException {
  3. // 1. createNewFile 创建新的空的文件
  4. // 细节1:如果当前路径表示文件时不存在的,则创建成功,返回true; 否则,返回false
  5. // 细节2:如果父路径不存在,那么方法会有异常
  6. // 细节3:创建的一定是文件,如果路径不包含后缀名,则是一个没有后缀的文件
  7. File f1 = new File("D:\\aaa\\c.txt");
  8. boolean b1 = f1.createNewFile();
  9. System.out.println(b1);
  10. // 2.mkidr 创建单级文件夹(目录)
  11. // 细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
  12. // 细节2:只能创建单级文件夹,无法创建多级文件夹
  13. File f2 = new File("D:\\aaa\\ddd");
  14. boolean b2 = f2.mkdir();
  15. System.out.println(b2); // false
  16. // 3.mkidrs 创建多级文件夹
  17. // 细节: 既可以创建单级文件夹,也可以创建多级文件夹
  18. File f3 = new File("D:\\aaa\\aaa\\bbb\\ccc");
  19. boolean b3 = f3.mkdirs();
  20. System.out.println(b3); // true
  21. // 4.delete 删除文件、空文件夹
  22. // 细节: 如果删除的是文件,则直接删除,不走回收站
  23. // 如果删除的是空文件夹,则直接删除,不走回收站
  24. // 如果删除的是有内容的文件夹,则删除失败
  25. File f4 = new File("D:\\aaa\\a.txt");
  26. boolean b4 = f4.delete();
  27. System.out.println(b4);
  28. }
  29. }

3. 获取并遍历

方法名称说明
public File [ ]  listFiles ( )获取当前该路径下所有内容

注意:

  • 当调用者File表示的路径不存在时,返回null。
  • 当调用者File表示的路径是文件时,返回null。
  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组。
  • 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回。
  • 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。
  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null。
  1. public class FileDemo05 {
  2. public static void main(String[] args) {
  3. //1.创建file对象
  4. File f = new File("D:\\aaa");
  5. //2.调用方法
  6. //作用:获取文件夹中所有内容,把所有的内容存放到数组并返回
  7. File[] files = f.listFiles();
  8. for (File file : files) {
  9. //file依次表示文件夹中的每一个文件或者文件夹
  10. System.out.println(file);
  11. }
  12. }
  13. }

四、 综合练习

1.  练习一 : 创建文件

需求:在当前模块下的aaa文件夹中创建一个a.txt文件。(不需要考虑子文件夹)

  1. public class FileTest {
  2. public static void main(String[] args) throws IOException {
  3. // 1.创建a.txt父级路径
  4. File file = new File("java02\\aaa");
  5. // 2.创建父级路径
  6. // 如果aaa是存在的,那么此时创建失败
  7. // 如果aaa是不存在的,那么此时创建成功
  8. file.mkdirs();
  9. // 3.拼接父级路径和子级路径
  10. File src = new File(file, "a.txt");
  11. boolean b = src.createNewFile();
  12. if (b) {
  13. System.out.println("创建成功");
  14. } else {
  15. System.out.println("创建失败");
  16. }
  17. }
  18. }

2.  练习二 :单个文件夹查找文件

需求:定义一个方法找某一个文件夹中。是否有以avi结尾的电影。

  1. public class FileTest {
  2. public static void main(String[] args) throws IOException {
  3. File file = new File("D:\\aaa");
  4. boolean b = haveAvi(file);
  5. System.out.println(b);
  6. }
  7. //作用: 用来找某个文件夹中,是否有以avi结尾的电影
  8. //形参: 要查找的文件夹
  9. //返回值:查找的结果
  10. public static boolean haveAvi(File file) {
  11. //1.进入文件夹,获取其中的所有的内容
  12. File[] files = file.listFiles();
  13. for (File f : files) {
  14. if (f.isFile() && f.getName().endsWith(".avi")) {
  15. return true;
  16. }
  17. }
  18. //循环结束,仍未找到
  19. return false;
  20. }
  21. }

3.  练习三 :遍历硬盘查找文件

需求:找到电脑中所有以avi结尾的电影。(需要考虑子文件夹)

  1. public class FileTest {
  2. public static void main(String[] args) throws IOException {
  3. File src = new File("C:\\");
  4. findAvi(src);
  5. }
  6. public static void findAvi() {
  7. // 获取本地所有的盘符
  8. File[] arr = File.listRoots();
  9. for (File f : arr) {
  10. findAvi(f);
  11. }
  12. }
  13. public static void findAvi(File file) {
  14. // 1.进入文件夹
  15. File[] files = file.listFiles();
  16. // 2.遍历数组 得到file中每一个文件或文件夹
  17. if (files != null) {
  18. for (File f : files) { // files 可能为空指针
  19. if (f.isFile()) {
  20. // 3.判断: 是文件,执行业务逻辑
  21. String name = f.getName();
  22. if (name.endsWith(".avi")) {
  23. System.out.println(f);
  24. }
  25. } else {
  26. // 4.判断: 是文件夹,就可以递归
  27. // 细节: 再次调用方法,参数必须是file的次一级
  28. findAvi(f);
  29. }
  30. }
  31. }
  32. }
  33. }

4.  练习四 :删除文件夹

需求:删除一个多级文件夹。

  1. public class FileTest {
  2. public static void main(String[] args) {
  3. // 如果我们想要删除一个含有内容的文件夹?
  4. // 1.先删除文件夹里面的所有的内容
  5. // 2.再删除文件夹自己
  6. File file = new File("D:\\aaa\\src");
  7. delete(file);
  8. // delete 只能删除文件和空的文件夹
  9. }
  10. // 作用:删除src文件夹
  11. // 参数 : 要删除的文件夹
  12. public static void delete(File src) {
  13. // 1.先删除文件夹内所有文件
  14. File[] files = src.listFiles();
  15. for (File file : files) {
  16. if (file.isFile()) {
  17. file.delete();
  18. } else {
  19. delete(file);
  20. }
  21. }
  22. // 2.再删除文件夹自己
  23. src.delete();
  24. }
  25. }

 5.  练习五 :统计文件夹大小

需求:统计一个文件夹的总大小。

  1. public class FileTest {
  2. public static void main(String[] args) {
  3. File file = new File("D:\\aaa\\src");
  4. long len = getLen(file);
  5. System.out.println(len);
  6. }
  7. //作用:统计一个文件夹的大小
  8. //形参: 要统计的文件夹
  9. //返回值: 文件夹大小
  10. public static long getLen(File src) {
  11. long len = 0;
  12. File[] files= src.listFiles();
  13. for(File file : files) {
  14. if (file.isFile()) {
  15. len = len + file.length();
  16. }else {
  17. len = len + getLen(file);
  18. }
  19. }
  20. return len;
  21. }
  22. }

6.  练习六 :统计各种文件数量

需求:需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)

打印格式如下:

  • txt:3个
  • doc:4个
  • jpg:6个
  1. public class FileTest {
  2. public static void main(String[] args) {
  3. // 统计 : 计数器思想
  4. File file = new File("D:\\aaa\\src");
  5. Map<String, Integer> hm = getCount(file);
  6. System.out.println(hm);
  7. }
  8. // 作用:统计一个文件夹中每种文件的个数
  9. // 形参: 要统计的文件夹
  10. // 返回值: 以用来统计的map集合(键:后缀名 值:次数)
  11. public static Map<String, Integer> getCount(File src) {
  12. // 定义集合用来统计
  13. HashMap<String, Integer> hm = new HashMap<>();
  14. // 进入src文件夹
  15. File[] files = src.listFiles();
  16. // 遍历
  17. for (File file : files) {
  18. if (file.isFile()) {
  19. String name = file.getName();
  20. String[] arr = name.split("\\.");
  21. if (arr.length >= 2) {
  22. String endName = arr[arr.length - 1];
  23. if (hm.containsKey(endName)) {
  24. // 存在
  25. int count = hm.get(endName);
  26. count++;
  27. hm.put(endName, count);
  28. } else {
  29. // 不存在
  30. hm.put(endName, 1);
  31. }
  32. }
  33. } else {
  34. // sonMap开麦女士子文件中每一种文件的个数
  35. Map<String, Integer> sonMap = getCount(file);
  36. Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
  37. for (Map.Entry<String, Integer> entry : entries) {
  38. String key = entry.getKey();
  39. int value = entry.getValue();
  40. if (hm.containsKey(key)) {
  41. // 存在
  42. int count = hm.get(key);
  43. count = count + value;
  44. hm.put(key, count);
  45. } else {
  46. // 不存在
  47. hm.put(key, value);
  48. }
  49. }
  50. }
  51. }
  52. return hm;
  53. }
  54. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/388689
推荐阅读
相关标签
  

闽ICP备14008679号