• Java---File详解


    目录

    一、File的概述

    二、File的创建

    三、File的常见成员方法

    1:判断和获取

    2:创建和删除

     (1)createNewFile()

    (2)mkdir()

    (3)delete()

    3:获取并遍历

    四:使用File具体实现需求:

    (1)定义一个方法找某一个文件夹中,是否有以txt结尾的文件

    (2)找出电脑中所有以.avi结尾的文件

     (3)删除一个多级文件夹

    (4)统计一个文件夹的总大小

    (5)统计一个文件夹中每种文件的个数


    一、File的概述

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

    二、File的创建

    1. public File(String pathname) 根据文件路径创建文件对象
    2. public File(String parent,String child) 根据父路径名字符串和子路径名字符串创建文件对象
    3. public File(File parent,String child) 根据父路径对应文件对象和子路径名字符串创建文件
    4. 对象

    三、File的常见成员方法

    1:判断和获取

    1. public boolean isDirectory() 判断此路径名表示的File是否是文件夹
    2. public boolean isFile() 判断此路径名表示的File是否是文件
    3. public boolean exists() 判断此路径名表示的File是否存在
    4. public long length() 返回的是文件的大小(字节数量,/1024是KB,/1024/1024是MB以此类推)
    5. public String getAbsolutePath() 返回文件的绝对路径
    6. public String getPath() 返回定义文件时使用的路径
    7. public String getName() 返回文件的名称,带后缀(没有后缀的文件也是存在的,叫纯文本文件)
    8. public long lastModified() 返回文件的最后修改时间(时间毫秒值)

    2:创建和删除

    1. public boolean createNewFile() 创建一个新的空的文件
    2. public boolean mkdir() 创建单级文件夹
    3. public boolean mkdirs() 创建多级文件夹
    4. public boolean delete() 删除文件、空文件夹
    5. 它们的返回值是boolean类型的,也就是是否创建成功

     (1)createNewFile()

    如果当前路径表示的文件是不存在的,则创建成功,返回true
    如果当前路径表示的文件是存在的,则创建失败,方法返回false

    如果父级路径不存在,那么方法会有异常IOException

    createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件(纯文本文件也是文件)

    (2)mkdir()

    windwos当中路径是唯一的,如果当前路径已经存在则创建失败,返回false,(文件夹不可和纯文本文件重名,其他文件可以因为是有后缀的)
    mkdir只能创建单级文件夹,无法创建多级文件夹(也就是无法在不存在的文件夹下再继续创建文件夹)

    创建一个文件夹

    (3)delete()

    如果删除的是文件则直接删除,不走回收站
    如果删除的是空文件夹,则直接删除,不走回收站
    如果删除的是有内容的文件夹,则删除失败

    3:获取并遍历

    1. public File[] listFiles() 获取当前路径下所有内容
    2. public static File[] listRoots() 列出可用的文件系统根
    3. public String[] list() 获取当前该路径下所有内容
    4. public String[] list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
    5. public File[] listFiles() 获取当前该路径下所有内容
    6. public File[] listFiles(FileFilter filter) 利用文件名过滤器获取当前该路径下所有内容
    7. public File[] listFiles(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
    1. class Base{
    2. public static void main(String[] args) throws IOException {
    3. File s=new File("D:\\MySQL");
    4. File[] ss=s.listFiles();
    5. for(File f:ss) {
    6. System.out.println(f);
    7. }
    8. }
    9. }

    四:使用File具体实现需求:

    (1)定义一个方法找某一个文件夹中,是否有以txt结尾的文件

    1. class Base{
    2. public static void main(String[] args) throws IOException {
    3. File fi=new File("D:\\html\\ty");
    4. File[] f=fi.listFiles();
    5. for(File i:f) {
    6. System.out.println(i);
    7. }
    8. System.out.println(findfile(fi));
    9. }
    10. public static boolean findfile(File file) {
    11. //递归寻找
    12. File[] fi=file.listFiles();
    13. for(File f:fi) {
    14. if(f.isFile()) {
    15. if(f.getName().endsWith(".txt")) {
    16. return true;
    17. }
    18. }
    19. }
    20. return false;
    21. }
    22. }

    (2)找出电脑中所有以.avi结尾的文件,并输出

    1. class Base{
    2. public static void main(String[] args) throws IOException {
    3. File file =new File("D:\\");
    4. findfile(file);
    5. }
    6. public static void findfile() {
    7. File[] s=File.listRoots();
    8. for(File i:s) {
    9. findfile(i);
    10. }
    11. }
    12. public static void findfile(File file) {
    13. File[] fi=file.listFiles();
    14. if(fi!=null) {
    15. for(File i:fi) {
    16. if(i.isFile()) {
    17. //是文件
    18. if(i.getName().endsWith(".avi")) {
    19. System.out.println(i.getName());
    20. }
    21. }
    22. else {
    23. //是文件夹,开始递归查找
    24. findfile(i);
    25. }
    26. }
    27. }
    28. }
    29. }

     (3)删除一个多级文件夹(前面学到的delete还能删除文件和一个空的文件夹,无法删除有内容的文件夹)

    1. class Base{
    2. public static void main(String[] args) throws IOException {
    3. File file =new File("D:\\html\\ty");
    4. del(file);
    5. }
    6. public static void del(File file) {
    7. File[] fi=file.listFiles();
    8. for(File i:fi) {
    9. if(i.isFile()) {
    10. i.delete();
    11. }
    12. else {
    13. del(i);
    14. }
    15. }
    16. file.delete();
    17. }
    18. }

    (4)统计一个文件夹的总大小

    1. class Base{
    2. public static void main(String[] args) throws IOException {
    3. File file =new File("D:\\html");
    4. System.out.println(len(file));
    5. }
    6. public static long len(File file) {
    7. long sum=0;
    8. File[] fi=file.listFiles();
    9. for(File i:fi) {
    10. if(i.isFile()) {
    11. //是文件
    12. sum+=i.length();
    13. }
    14. else {
    15. //是文件夹
    16. sum+=len(i);
    17. }
    18. }
    19. return sum;
    20. }
    21. }

    (5)统计一个文件夹中每种文件的个数并打印
    如下:txt 3个
              doc 4个
              jpg 6个

    1. class Base{
    2. public static void main(String[] args){
    3. HashMap map=new HashMap<>();
    4. File file=new File("D:\\ks");
    5. map=findfile(file);
    6. Set> s=map.entrySet();
    7. for(Map.Entry i:s) {
    8. String key=i.getKey();
    9. Integer val=i.getValue();
    10. System.out.println("键="+key+" 值="+val);
    11. }
    12. }
    13. public static HashMap findfile(File file){
    14. File[] fi=file.listFiles();
    15. HashMap ma=new HashMap<>();
    16. for(File f:fi) {
    17. if(f.isFile()) {
    18. //是文件
    19. String name=f.getName();
    20. String[] s=name.split("\\.");
    21. if(s.length>=2) {
    22. String ss=s[s.length-1];
    23. if(ma.containsKey(ss)) {
    24. int count=ma.get(ss);
    25. count++;
    26. ma.put(ss, count);
    27. }
    28. else {
    29. ma.put(ss,1);
    30. }
    31. }
    32. }
    33. else {
    34. //是文件夹
    35. //开始递归查找
    36. Set> sonmap=findfile(f).entrySet();
    37. //子文件夹中的各个文件开始一个一个查找
    38. for(Map.Entry i:sonmap) {
    39. String key=i.getKey();
    40. Integer val=i.getValue();
    41. if(ma.containsKey(key)) {
    42. val=val+ma.get(key);
    43. ma.put(key, val);
    44. }
    45. else {
    46. ma.put(key, val);
    47. }
    48. }
    49. }
    50. }
    51. return ma;
    52. }
    53. }

  • 相关阅读:
    期货开户是否有资金门槛?
    虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?
    零代码编程:用ChatGPT批量合并文件夹
    45.Redis核心数据结构实战与高性能原理剖析
    Python爬虫详解:原理、常用库与实战案例
    Numpy基础代码学习
    ASEMI肖特基二极管1N5822参数,1N5822特征,1N5822应用
    毕业设计 stm32单片机的家庭成员监控监护系统 - 物联网 嵌入式
    长安链GO语言智能合约环境搭建及使用
    一套史诗级版vue详解!
  • 原文地址:https://blog.csdn.net/gaoqiandr/article/details/128128340