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 }