File类的使用
File的用法
File是用来对文件进行操作的。IO流是对文件的读写进行操作,本身不具有对文件的增删。
三种创建File的方式
1.直接给定文件路径。(此指绝对路径。)
private static void demo01() {
// 通过给定的路径名确定文件
String path = "E:\\itheima\\a.txt";
// 使用File类中的方法
File file = new File(path);
System.out.println(file.getName());
System.out.println(file.isFile());
}
2.使用父路径和文件名。
private static void demo02() throws IOException {
File f = new File("a.txt");
if (!f.exists()) {
f.createNewFile();
}
String path1 = "E:\\itheima";
String path2 = "a.txt";
File file = new File(path1, path2);
System.out.println(file.getAbsolutePath());
}
3.使用父文件对象和文件名。
private static void demo03() {
File file = new File("E:\\itheima");
String name = "a.txt";
File file2 = new File(file,name);
System.out.println(file2.getAbsolutePath());
}
创建文件的方法
创建空文件
createNewFile()
public boolean createNewFile();
创建一个新的空的文件。
创建文件夹
f.mkdir(); //创建一个单级文件夹
f.mkdirs(); //创建一个多级文件夹。
删除文件
File file = new File("E:\\itheima\\a.txt");
file.delete();
// public boolean delete(); 删除文件。
File类判断和获取功能
public boolean isDirectory() //测试此抽象路径名表示的file是否为目录
public boolean isFile() //测试该File是否为文件
public boolean exists() //测试该file是否存在
public String getName() //返回该路径名表示的文件或目录的名称。
File类高级获取
listfiles();
File[] files = file.listFiles();
注意事项:
当调用者不存在时,返回null
当调用者是一个文件时,返回null
当调用者是一个空文件夹时,返回一个长度为0的数组。
当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回。
当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。
当调用者是一个需要权限才能进入的文件夹时,返回null。
练习1.在当前文件夹 aaa 文件夹下创建 a.txt文件
private static void demo07() throws IOException {
File file1 = new File("aaa");
file1.mkdir();
File file2 = new File(file1,"a.txt");
boolean flag = file2.createNewFile();
System.out.println(flag);
}
练习2.删除多级文件夹
private static void deleteDir(File src) {
// 从该源文件中找到所有的子文件,
// 首先进入该源文件夹,然后从该文件夹中查看所有的子文件,属于文件的直接删除,属于文件夹的递归,然后是文件的再删除。
// 最后删除src源文件。
File[] files = src.listFiles();
for (File file : files) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
deleteDir(file);
}
}
src.delete();
}
练习3,统计一个源文件夹内的各类型的文件数量。
private static void demo09() {
File file = new File("E:\\BiliDown");
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 filename = f.getName();
String[] filename_arr = filename.split("\\.");
int length = filename_arr.length;
String last_name = filename_arr[length - 1];
boolean flag = map.containsKey(last_name);
if (flag == true) {
// 如果该后缀文件已经存在。
Integer number = map.get(last_name);
number++;
map.put(last_name, number);
} else if (flag == false) {
// 如果没有存在
map.put(last_name, 1);
}
} else if (f.isDirectory()) {
// 如果是文件夹的话,继续递归进入
getCount(map, f);
}
}
}