File类概述和构造方法
File类是什么?
1,在读写数据时告诉虚拟机要操作的(文件/文件夹)在哪
2,对(文件/文件夹)本身进行操作。包括创建,删除等。
file:他是文件和目录路径名的抽象表示
1.文件和目录可以通过File封装成对象
2.File封装的对象仅仅是一个路径名。他可以是存在的,也可以是不存在的
File的构造方法:
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 |
第二个构造就是将两个字符串路径进行拼接(可以用于使用变量访问不同路劲)
第三个则是File 跟字符串进行拼接成新的路径
绝对路径和相对路径
绝对路径:从盘符开始
相对路径:相对当前项目下的路径
File类成员方法
创建文件夹
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 创建一个单级文件夹 |
public boolean mkdirs() | 创建一个多级文件夹 |
File file =new File("test//a.txt"); file.createNewFile();
createNewFile()
如果文件存在,那么创建失败返回false .
如果文件不存在,那么创建成功,返回true
不管调用者有没有后缀名,只能创建文件
mkdir() 不怎么用
不管调用者有没有后缀名,只能创建单级文件夹
mkdirs() 创建文件夹直接用这个
可以创建单级文件夹,也可以创建多级文件夹
不管有没有后缀,只能创建文件夹
File删除
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
delete方法直接删除不走回收站。
如果删除的是一个文件,直接删除。
如果删除的是一个文件夹,必须先删除文件夹中的内容,最后才能删除文件夹。
File 判断和获取功能
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转换为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
getName() :
调用者是文件,则得到的是文件名和后缀名
如果调用者是文件夹,得到的是文件夹名
File类高级获取功能
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
1.当调用者不存在是,返回null
2.当调用者是一个文件时,返回null
3.当调用者是空文件夹时,返回一个长度为0的数组
4.当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在file数组中返回
5.当调用者是有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在file数组中返回,包括隐藏内容
6.当调用者是一个需要权限才能进入的文件夹时 返回null
例子 :获取文件内所有文件夹 和 文件 并统计类型跟相应的个数
public class Test { public static void main(String[] args) throws IOException { File file = new File("test"); HashMap<String, Integer> map = new HashMap<>(); getCount(map, file); System.out.println(map); } private static void getCount(HashMap<String, Integer> map, File file) { File[] files = file.listFiles(); for (File f : files) { //判断是否是文件 if (f.isFile()) { String name = f.getName(); //这里分割按 . 进行分割但是. 是转义字符 必须加\\ String[] strings = name.split("\\."); if (strings.length == 2) { String endName = strings[1]; if (map.containsKey(endName)) { //已经存在键 //获取值然后加一 int value = map.get(endName) + 1; //覆盖原来的值 完成加一 map.put(endName, value); } else { //键还不存在 //初始化键 设置为一次 map.put(endName, 1); } } //如果不是文件是文件夹 则用递归再次调用 } else { if(map.containsKey("wenjianjia")){ //已经存在键 //获取值然后加一 int value = map.get("wenjianjia")+1; //覆盖原来的值 完成加一 map.put("wenjianjia",value); }else{ //键还不存在 //初始化键 设置为一次 map.put("wenjianjia",1); } //递归再次调用 getCount(map, f); } } } }