一,File,对文件夹进行操作,表示文件或者文件夹的路径对象
1, File 的三种创建方式,如下代码
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
//File 的三个构造方法
//直接创建
File file=new File("D:\\xiaowang\\a.txt");
System.out.println(file);
//根据父路径和子路径进行拼接,创建File对象
File file1=new File("D:\\xiaowang","a.txt");
System.out.println(file1);
//创建一个父路径,再根据父路径和子路径创建一个File对象
File file2=new File("D:\\xiaowang");
File file3=new File(file2,"a.txt");
System.out.println(file3);
}
}
2,绝对路径和相对路径:
绝对路径:从盘符开始,表示位置不会再变。
相对路径:相对当前项目路径而言。
import java.io.File;
public class FileDemo2 {
public static void main(String[] args) {
//这个路径固定不变、是绝对路径,从盘符开始写路径
File file=new File(" C:\\itheima\\a.txt");
//相对路径,是相对于项目的根目录而言,不用写根目录的路径
File file1=new File("day11\\a.txt");
//当前项目下,指定模块下的相对路径
File file2=new File("day11\\a.txt");
}
}
3,File类三种创建功能
1)createNewFile():只能创建文件,有返回值,为Boolean类型,文件所在的文件夹必须存在
2)mkdir():只能创建单级文件夹
3)mkdirs():既能创建单级文件夹,又能创建多级文件夹(用这种方法比较多)
import java.io.File;
import java.io.IOException;
public class FileDemo3 {
public static void main(String[] args) throws IOException {
//createNewFile
//注意点;
//1,如果文件存在,那么创建失败,返回false
//2,如果文件不存在,创建成功,返回true
//3,createNewFile方法不管调用者有没有后缀名,只能创建文件
File f=new File("D:\\itheima\\a.txt");
boolean result= f.createNewFile();
//mkdir,创建单级文件夹
File f1=new File("D:\\itheima\\a");
f1.mkdir();
//mkdirs,创建多级文件夹
File f2=new File("D:\\itheima\\aa\\bb\\cc");
f2.mkdirs();
//删除文件夹 delet
boolean d = f.delete();
System.out.println(d);
}
}
4,删除文件夹\文件,delete()方法,返回值为Boolean类型
注意:delete()删除文件夹不走回收站
5,File类当中的判断和获取功能
1),isDirectory():测试此抽象路径名表示的File表示的是否是文件夹,返回值为Boolean
2),isFile():测试此抽象路径名表示的File表示的是否是文件,返回值问Boolean
3),exists():测试此抽象路径名表示的File是否存在,返回值为Boolean
4),getName():返回由此抽象路径名表示的文件或目录的名称,返回值为String
如果调用的是一个文件,则获取的是文件名和后缀
如果调用的是一个文件夹,获取的就是一个文件夹的名字
6,高级获取功能:ListFile(),返回一个File 数组
功能:进入文件夹,获取文件夹中所有的文件和问价你家的File对象(包括隐藏文件),并把这 些File对象都放在一个File数组中;
注意:
1),当调用者是一个文件时,返回null;
2),当调用者是一个空文件夹时,返回的是一个长度为0 的数组;
3),当调用者是一个有权限才能进入的文件夹时,也会返回null;
4),当调用者为空时,也会返回null;
import java.io.File;
public class FileDemo5 {
public static void main(String[] args) {
//listFiles
File f=new File("D:\\");
File[] files = f.listFiles();
for (File file : files) {
System.out.println(file);
}
}
}
7,练习1:删除文件夹,采用递归方法
import java.io.File;
public class practice1 {
public static void main(String[] args) {
File f = new File("D:\\itheima");
deletDirectory(f);
}
public static void deletDirectory(File file) {
//获取文件夹中的内容
File[] files = file.listFiles();
//for循环是用来删除文件夹里的内容
for (File file1 : files) {//用加强的for循环
if (file1.isFile()) {//判断是不是文件
//是文件,直接用delet删除
file1.delete();
} else {
//如果不是文件在,则是文件夹,调用递归
deletDirectory(file1);
}
}
//循环结束后,删除空文件夹
file.delete();
}
}
练习2:统计一个文件夹中每种文件出现的个数并打印
import java.io.File;
import java.util.HashMap;
public class practice3 {
//统计文件中每一种文件出现的次数
public static void main(String[] args) {
//建立一个集合(HashMap)
HashMap<String, Integer> map = new HashMap<>();
//建立一个文件包装,将目录文件进行包装
File file = new File("D:\\黑马\\StudedntManager");
//创建函数,将文件和集合作为参数传入方法中
getCount(map, file);
System.out.println(map);
}
public static void getCount(HashMap<String, Integer> map, File file) {
//获取文件的内容
File[] files = file.listFiles();
for (File file1 : files) {
//如果是文件,获取文件的后缀
if (file1.isFile()) {
String[] split = file.getName().split("\\.");
//获取数组中最后一个数据
String endName = split[split.length - 1];
//在集合中判断文件后缀出现的次数,如果首次出现,则直接存入集合中
if (map.containsKey(endName)) {
//如果不是首次出现,取出键,值加一,存入集合中
Integer v = map.get(endName);
map.put(endName, v++);
//如果是第一次存入,那么就直接存入集合
} else {
map.put(endName, 1);
}
} //如果是文件夹,调用递归
else {
getCount(map, file1);
}
}
}
}