java的File类

File

File类是Java中用于处理文件和目录的类。它提供了一系列的方法,可以对文件进行创建、删除、重命名、复制、移动、获取文件属性等操作。 

File表示什么?

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

绝对路径和相对路径是什么意思?

绝对路径是带盘符的。

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

File构造方法 

public File(string pathname)                 根据文件路径创建文件对象
public File(string parent,string child)      根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent,string child)  根据父路径对应文件对象和子路径名字符串创建文件对象

 public File(string pathname)                 根据文件路径创建文件对象

这里文件路径输入自己想设置的路径就好了,可以自己创建好文件,直接复制路径就好了

 

public File(string parent,string child)      根据父路径名字符串和子路径名字符串创建文件对象 

刚刚写的路径  C:\\Users\\14414\\Desktop\\a.exe   的父级路径与子级路径如下 

父级路径   C:\\Users\\14414\\Desktop

子级路径    a.exe 

 

 

public File(File parent,string child)  根据父路径对应文件对象和子路径名字符串创建文件对象 

这个也就是把一个File表示的路径和string表示路径进行拼接  

File的常见成员方法

判断与获取

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

判断 

对文件的路径进行判断

 

 

对文件夹的路径进行判断 

对不存在的文件的路径进行判断 

获取 

length 

 

这个文件是空的

写点东西,可以看到就有值了 

那可不可以获取文件夹的大小呢?

 

 

这个方法只能获取文件的大小,单位是字节,如果单位我们要是M,G,可以不断的除以1024

这个方法无法获取文件夹的大小,如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。

getAbsolutePath() 返回文件的绝对路径

 

getPath()                返回定义文件时使用的路径

 

getName()                返回文件的名称,带后缀

那能否获取文件夹的名称呢?👇

如果是文件的话 例如a.txt:    a 文件名    txt 后缀名、扩展名

如果是文件夹:返回的就是文件夹的名字

lastModified()                返回文件的最后修改时间(时间毫秒值) 

创建与删除

public boolean createNewFile()        创建一个新的空的文件
public boolean mkdir()                创建单级文件夹
public boolean mkdirs()                创建多级文件夹
public boolean delete()                空文件夹删除文件

创建 

 createNewFile()        创建一个新的空的文件

可以看到已经创建成功了

那如果在运行一遍(已经有这个文档了,还会创建吗?)

 

就不会了,返回值false

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

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

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

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

 mkdir()                创建单级文件夹

mkdir能否创建多级文件夹👇 

 

windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false

mkdir方法只能创建单级文件夹,无法创建多级文件夹。

 mkdirs()                创建多级文件夹

 

mkdirs能否创建单级文件夹 

mkdirs既可以创建单级的,又可以创建多级的文件夹

删除 

 

运行之后是没有c.txt了,回收站里也没有

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

文件夹ddd后是有文件的,看看能否删除

 

那如果是空文件夹呢?

 

如果删除的是空文件夹,则直接删除,不走回收站

如果删除的是有内容的文件夹,则删除失败

获取并遍历

public File[] listFiles()获取当前该路径下所有内容 

 

 

当调用者File表示的路径不存在时,返回null

当调用者File表示的路径是文件时,返回null

当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组

当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回

当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件

当调用者File表示的路径是需要权限才能访问的文件夹时,返回null


public static File[] listRoots()                列出可用的文件系统根
public string[] list()                                获取当前该路径下所有内容
public string[] list(FilenameFilter filter)        利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles()        获取当前该路径下所有内容
public File[] listFiles(FileFilter filter)        利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FilenameFilter filter)        利用文件名过滤器获取当前该路径下所有内容 

public static File[] listRoots()                列出可用的文件系统根

list()                                获取当前该路径下所有内容

public string[] list(FilenameFilter filter)        利用文件名过滤器获取当前该路径下所有内容

例子:获取E:\\111文件夹里所有的txt文件 

accept方法的形参,依次表示aaa文件夹里面每一个文件或者文件夹的路径
参数一:父级路径   参数二:子级路径
返回值:如果返回值为true,就表示当前路径保留。如果返回值为false,就表示当前路径舍弃不要

 

public File[] listFiles(FileFilter filter)        利用文件名过滤器获取当前该路径下所有内容

例子:获取E:\\111文件夹里所有的txt文件  

 

public File[] listFiles(FilenameFilter filter)        利用文件名过滤器获取当前该路径下所有内容 

例子:获取E:\\111文件夹里所有的txt文件  

 


练习 

1、在当前模块下的aaa文件夹中创建一个a.txt文件

2、定义一个方法找某一个文件夹中。是否有以exe结尾的文件。 

 

3、 找到电脑中所有以avi结尾的电影。

 

大家想运行的话可以自行运行哦😀

4、删除一个多级文件夹

 大家谨慎运行这个代码哦!!!

5、统计一个文件夹的总大小

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

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class FileTest6 {
    public static void main(String[] args) {
        File file = new File("E:\\111\\ccc");
        HashMap<String, Integer> hm = count(file);
        System.out.println(hm);
    }
    public static HashMap<String,Integer> count(File file){
        HashMap<String,Integer>hm=new HashMap<>();
        File[] files = file.listFiles();
        for (File src : files) {
            if(src.isFile()){
                //是文件
                String name = src.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{
                //如果是文件夹,递归
                HashMap<String,Integer>sonMap=count(src);
                //遍历sonMap把里面的值累加到hm中
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    Integer 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;
    }
}

 


这一期就到这里啦!!!感谢各位观看!!!

还要继续努力努力再努力

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力敲代码的小火龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值