目录
【File类】
【概述】:是文件和目录路径名的抽象表示
【特点】:
- 文件和目录可以通过File封装成对象
- File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的。
【构造方法】:
File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File(String parent, String child):从父路径名字符串和子路径名字符串创建新的File实例
File(File parent, String child):从父抽象路径名和子路径名字符串创建新的File实例
例:
//(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
String path="G:\\JAVA\\a.txt";
File file1=new File(path);
System.out.println(file1);
//File(String parent, String child):从父路径名字符串和子路径名字符串创建新的File实例
String path1="G:\\JAVA";
String path2="a.txt";
File file2=new File(path1,path2);
System.out.println(file2);
//File(File parent, String child):从父抽象路径名和子路径名字符串创建新的File实例
File file=new File("G:\\JAVA");
String path3="a.txt";
File file3=new File(file,path3);
System.out.println(file3);
【创建File方法】
public boolean createNewFile():创建一个新的空的文件
【注意】:
- 如果文件存在,那么会创建失败,返回false
- 如果文件不存在,那么会创建成功,返回true
- createNewFile方法不管调用者有没有后缀名,只能创建文件
public boolean mkdir():创建一个单级文件夹
【注意】:
- 只能创建单级文件夹,不能创建多级文件夹
- 不管调用者有没有后缀名,只能创建文件夹
public boolean mkdirs():创建一个多级文件夹
【注意】:
- 既可以创建多级文件夹,也可以创建单级文件夹
- 不管调用者有没有后缀名,只能创建文件夹
例:
File file4=new File("G:\\JAVA\\a.txt");
boolean result = file4.createNewFile();
System.out.println(result);
File file5=new File("G:\\JAVA\\aaa");
boolean result1=file5.mkdir();
File file6=new File("G:\\JAVA\\aaa\\bbb");
boolean result2=file6.mkdirs();
System.out.println(result2);
【File删除方法】
public boolean delete():删除由此抽象路径名表示的文件或目录
【注意】:
- delete方法直接删除不走回收站。
- 如果删除的是一个文件,直接删除。
- 如果删除的是一个文件夹,需要先删除文件夹中的内容,最后才能删除文件夹。
例:
File file=new File("G:\\JAVA\\a.txt");
boolean result = file.delete();
System.out.println(result);
【File判断和获取方法】
public boolean isDirectory():测试此抽象路径名表示的File是否为目录
public boolean isFile():测试此抽象路径名表示的File是否为文件
public boolean exists():测试此抽象路径名表示的File是否存在
public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
public String getPath():将此抽象路径名转换为路径名字符串
public String getName():返回由此抽象路径名表示的文件或目录的名称
例:
File file=new File("G:\\JAVA\\a.txt");
//public boolean isDirectory():测试此抽象路径名表示的File是否为目录
boolean result1 = file.isDirectory();
System.out.println(result1);
//public boolean isFile():测试此抽象路径名表示的File是否为文件
boolean result2 = file.isFile();
System.out.println(result2);
//public boolean exists():测试此抽象路径名表示的File是否存在
boolean result3 = file.exists();
System.out.println(result3);
//public String getName():返回由此抽象路径名表示的文件或目录的名称
String result4 = file.getName();
System.out.println(result4);
【File高级获取方法】
public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
【注意】:
- 当调用者不存在时,返回null
- 当调用者是一个文件时,返回null
- 当调用者是一个空文件夹时,返回一个长度为0的数组
- 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
- 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
- 当调用者是一个需要权限才能进入的文件夹时,返回null
例:
File file=new File("G:\\JAVA");
File[] files=file.listFiles();//返回值为file列表
for (File path : files) {
System.out.println(path);
}
【File类——示例项目】
1、删除一个包含多个文件夹和文件的多级文件夹
public static void main(String[] args) {
File src=new File("G:\\ceshi");
deleteDir(src);
}
private static void deleteDir(File src) {
File[] files=src.listFiles();
for (File file : files) {
if(file.isFile()){
file.delete();
}else {
deleteDir(file);
}
}
src.delete();
}
2、统计一个文件夹中每种文件的个数并打印(利用循环和递归)
public static void main(String[] args) {
File file=new File("stream_io");
HashMap<String ,Integer> hm=new HashMap<>();
getCount(hm,file);
System.out.println(hm);
}
private static void getCount(HashMap<String, Integer> hm, File file) {
File[] files=file.listFiles();
for (File f : files) {
if(f.isFile()){
String fileName = f.getName();
String[] fileNameArr = fileName.split("\\.");
if(fileNameArr.length==2){
String fileEndName=fileNameArr[1];
if(hm.containsKey(fileEndName)){
//已经存在
//将已经出现的次数获取出来
Integer count = hm.get(fileEndName);
count++;
//覆盖之前的值
hm.put(fileEndName,count);
}else{
//不存在
//表示当前文件是第一次出现
hm.put(fileEndName,1);
}
}
}else {
getCount(hm,f);
}
}
}