File

File类概述和构造方法

File:它是文件和目录路径名的抽象表示
  文件和目录可以通过File封装成对象
  File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的。

File(String pathname)   通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File(String parent, String child)   从父路径名字符串和子路径名字符串创建新的 File实例
File(File parent, String child)   从父抽象路径名和子路径名字符串创建新的 File实例

 1 public static void main(String[] args) {
 2     //File(String pathname)        通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
 3     String path = "C:\\test\\a.txt";
 4     File file = new File(path);
 5     //问题:为什么要把字符串表示形式的路径变成File对象?
 6     //就是为了使用File类里面的方法.
 7     
 8     //File(String parent, String child)    从父路径名字符串和子路径名字符串创建新的File实例
 9     String path1 = "C:\\test";
10     String path2 = "a.txt";
11     File file1 = new File(path1,path2);//把两个路径拼接.
12     System.out.println(file1);//C:\test\a.txt
13     
14     //File(File parent, String child)      从父抽象路径名和子路径名字符串创建新的File实例
15     File file2 = new File("C:\\test");
16     String path3 = "a.txt";
17     File file3 = new File(file2,path3);
18     System.out.println(file);//C:\test\a.txt
19 }

绝对路径和相对路径

绝对路径:从盘符开始
  File file1 = new File(“D:\\test\\a.txt”);
相对路径:相对当前项目下的路径
  File file2 = new File(“a.txt”);
  File file3 = new File(“模块名\\a.txt”);

File类创建功能

 

public boolean createNewFile() 创建一个新的空的文件
  如果文件存在,那么创建失败,返回false
  如果文件不存在,那么创建成功,返回true
  该方法不管调用者有没有后缀名,只能创建文件.(创建文件的文件夹必须存在)
public boolean mkdir() 创建一个单级文件夹(mkdirs包含mkdir方法,不常用)
  只能创建单级文件夹,不能创建多级文件夹
  不管调用者有没有后缀名,只能创建单级文件夹
public boolean mkdirs() 创建一个多级文件夹
  可以创建单级文件夹,也可以创建多级文件夹
  不管调用者有没有后缀名,只能创建文件夹

 1 public static void main(String[] args) throws IOException {
 2     //public boolean createNewFile()    创建一个新的空的文件
 3     File file1 = new File("C:\\test\\aaa");
 4     boolean result1 = file1.createNewFile();
 5     System.out.println(result1);
 6 
 7     //public boolean mkdir()            创建一个单级文件夹
 8     File file2 = new File("C:\\test\\aaa.txt");
 9     boolean result2 = file2.mkdir();
10     System.out.println(result2);
11 
12     //public boolean mkdirs()           创建一个多级文件夹
13     File file3 = new File("C:\\test\\aaa\\bbb\\ccc.txt");
14     boolean result3 = file3.mkdirs();
15     System.out.println(result3);
16 }

File类删除功能

public boolean delete() 删除由此抽象路径名表示的文件或目录(只能删除文件和空文件夹)
  delete方法直接删除不走回收站.
  如果删除的是文件,那么直接删除.如果删除的是文件夹,那么能删除空文件夹
  如果要删除一个有内容的文件夹,只能先进入到这个文件夹,把里面的内容全部删除完毕,才能再次删除这个文件夹

1 public static void main(String[] args) {
2     File file = new File("C:\\test\\a.txt");
3     boolean result = file.delete();
4     System.out.println(result);
5 }

File类判断和获取功能

public boolean isDirectory() 测试此抽象路径名表示的File是否为目录
public boolean isFile() 测试此抽象路径名表示的File是否为文件
public boolean exists() 测试此抽象路径名表示的File是否存在
public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
public String getPath() 将此抽象路径名转换为路径名字符串
public String getName() 返回由此抽象路径名表示的文件或目录的名称
  如果调用者是文件,那么获取的是文件名和后缀名
  如果调用者是一个文件夹,那么获取的是文件夹的名字

 1 public static void main(String[] args) {
 2     File file = new File("C:\\test\\a.txt");
 3     //public boolean isFile()       测试此抽象路径名表示的File是否为文件
 4     boolean result1 = file.isFile();
 5     //public boolean isDirectory()  测试此抽象路径名表示的File是否为目录
 6     boolean result2 = file.isDirectory();
 7     System.out.println(result1);
 8     System.out.println(result2);
 9     
10     //public boolean exists()       测试此抽象路径名表示的File是否存在
11     File file3 = new File("a.txt");
12     boolean result = file3.exists();
13     System.out.println(result);
14 
15     //public String getName()       返回由此抽象路径名表示的文件或目录的名称
16     File file4 = new File("a.txt");
17     String name = file4.getName();
18     System.out.println(name);  //a.txt
19 
20     File file1 = new File("C:\\test");
21     String name2 = file1.getName();
22     System.out.println(name2);  //test
23 }

File类高级获取功能

public File[] listFiles()   返回此抽象路径名表示的目录中的文件和目录的File对象数组
listFiles方法注意事项:
  当调用者不存在时,返回null
  当调用者是一个文件时,返回null
  当调用者是一个空文件夹时,返回一个长度为0的数组
  当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
  当调用者是一个需要权限才能进入的文件夹时,返回null

1 public static void main(String[] args) {
2    File file = new File("D:\\aaa");
3     File[] files = file.listFiles();//返回值是一个File类型的数组
4     for (File path : files) {
5         System.out.println(path);
6     }
7 }

结合递归删除多级文件夹

 1 public static void main(String[] args) {
 2     //delete方法只能删除文件和空文件夹.
 3     //如果现在要删除一个有内容的文件夹,需先删掉这个文件夹里面所有的内容,最后再删除这个文件夹
 4     File src = new File("C:\\Users\\Desktop\\src");
 5     deleteDir(src);
 6 }
 7 private static void deleteDir(File src) {
 8     //先删掉这个文件夹里面所有的内容.
 9     //递归: 方法在方法体中自己调用自己.
10     //注意: 可以解决所有文件夹和递归相结合的题目
11     //1.进入 --- 得到src文件夹里面所有内容的File对象.
12     File[] files = src.listFiles();
13     //2.遍历 --- 得到src文件夹里面每一个文件和文件夹的File对象.
14     for (File file : files) {
15         if(file.isFile()){
16             //3.判断 --- 如果遍历到的File对象是一个文件,那么直接删除
17             file.delete();
18         }else{
19             //4.判断
20             //递归
21             deleteDir(file);//参数一定要是src文件夹里面的文件夹File对象
22         }
23     }
24     //最后再删除这个文件夹
25     src.delete();
26 }

统计一个文件夹中每种文件的个数并打印

 1 public static void main(String[] args) {
 2     //统计一个文件夹中,每种文件出现的次数.
 3     //利用map集合进行数据统计,键 --- 文件后缀名  值 ----  次数
 4     File file = new File("develop");
 5     HashMap<String, Integer> hm = new HashMap<>();
 6     getCount(hm, file);
 7     System.out.println(hm); //{java=5, xml=6, class=5}
 8 }
 9 
10 private static void getCount(HashMap<String, Integer> hm, File file) {
11     File[] files = file.listFiles();
12     for (File f : files) {
13         if(f.isFile()){
14             String fileName = f.getName();
15             String[] fileNameArr = fileName.split("\\.");
16             if(fileNameArr.length == 2){
17                 String fileEndName = fileNameArr[1];
18                 if(hm.containsKey(fileEndName)){
19                     //已经存在,将已经出现的次数获取出来
20                     Integer count = hm.get(fileEndName);
21                     //这种文件又出现了一次.
22                     count++;
23                     //把已经出现的次数给覆盖掉.
24                     hm.put(fileEndName,count);
25                 }else{
26                     //不存在,表示当前文件是第一次出现
27                     hm.put(fileEndName,1);
28                 }
29             }
30         }else{
31             getCount(hm,f);
32         }
33     }
34 }

 

posted @ 2023-06-19 23:27  溯鸣  阅读(60)  评论(0编辑  收藏  举报