JAVA进阶 —— File
迪丽瓦拉
2024-06-02 21:44:19
0

目录

一、概述

 二、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 )根据父路径对应文件对象和子路径名字符串创建文件对象
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);}
}

三、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 ( )返回文件的最后修改时间(时间毫秒值)

判断:

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 (毫秒值)}
}

2. 创建与删除

方法名称说明
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);}
}

3. 获取并遍历

方法名称说明
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);}}
}

四、 综合练习

1.  练习一 : 创建文件

需求:在当前模块下的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("创建失败");}}
}

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

需求:定义一个方法找某一个文件夹中。是否有以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;}
}

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

需求:找到电脑中所有以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);}}}}
}

4.  练习四 :删除文件夹

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

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();}
}

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

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

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;}
}

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

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

打印格式如下:

  • 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;}
}

相关内容