我们在学习io的时候肯定需要对电脑上的文件进行操作,过程中会用到file类来进行操作,我们本篇文章就是对file的使用进行介绍
一、File的介绍
File 类 就是当前系统中 文件或者文件夹的抽象表示
通俗的讲 就是 使用File对象 来操作我们电脑系统中的文件或者文件夹
学习File类 其实就是学习 如果通过file对象 对系统中的文件/文件夹进行增删改查
二、file方法的介绍
1.创建一个文件
//创建一个文件
@Test
public void FileCreate() throws IOException {
//根据一个路径得到一个File对象
File file = new File("C:\\Users\\Desktop\\lt\\b.txt");
//创建文件
boolean b = file.createNewFile();
}
2.删除一个文件
//删除一个文件
@Test
public void FileDelete(){
//根据一个路径得到一个File对象
File file = new File("C:\\Users\\Desktop\\lt\\b.txt");
//删除文件
boolean delete = file.delete();
}
3.文件的转移
//把文件重命名为指定的文件路径 可以理解为文件的转移
@Test
public void FileAgainName(){
//得到一个file文件
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
File file2 = new File("C:\\Users\\Desktop\\lt\\b.txt");
//进行移动 父路径相同 相当于进行改名
file1.renameTo(file2);
//得到一个file文件
File file3 = new File("C:\\Users\\Desktop\\lt\\a.txt");
File file4 = new File("C:\\Users\\esktop\\lt\\b\\b.txt");
//进行移动 父路径不同 相当于进行移动
// 注意:如果目标文件路径无效那么不会进行移动,并不会去为你创建父文件
// 比如lt后面点的b文件夹并不存在,那么就不会移动
file3.renameTo(file4);
}
4.创建一个文件夹
//创建文件夹单级
@Test
public void FileCreateCatalogue(){
//根据路径得到一个file对象
File file = new File("C:\\Users\\Desktop\\lt\\b");
//创建文件夹 注意只可以创建单层 假设你要创建b//b1 如果没有b那么就会创建失败
boolean mkdir = file.mkdir();
}
//创建文件夹多级
@Test
public void FileCreateCatalogues() {
//根据路径得到一个file对象
File file = new File("C:\\Users\\Desktop\\lt\\b\\b");
//创建文件夹可以创建可以创建多层
boolean mkdir = file.mkdirs();
}
5.删除文件夹
//删除文件夹
@Test
public void FileDeleteCatalogue(){
//根据一个路径得到一个File对象
File file = new File("C:\\Users\\Desktop\\lt\\b");
//删除文件夹 注意:删除文件夹时,这个文件夹应是空文件夹,如果这个文件夹里有文件,则不能删除。
boolean delete = file.delete();
}
6.移动文件夹
//把文件重命名为指定的文件路径 可以理解为文件的转移
//如果文件夹里面有文件那么文件也会一并转移
@Test
public void FileAgainNameCatalogue(){
//得到一个file文件
File file1 = new File("C:\\Users\\Desktop\\lt\\a");
File file2 = new File("C:\\Users\\Desktop\\lt\\b");
//进行移动 父路径相同 相当于进行改名
file1.renameTo(file2);
//得到一个file文件
File file3 = new File("C:\\Users\\Desktop\\lt\\a");
File file4 = new File("C:\\Users\\Desktop\\lt\\b\\b");
//进行移动 父路径不同 相当于进行移动
// 注意:如果目标文件路径无效那么不会进行移动,并不会去为你创建父文件
// 比如lt后面点的b文件夹并没有,那么就不会移动
file3.renameTo(file4);
}
7.判断是否是文件或者文件夹以及判断文件或文件夹是否存在
//判断是否是文件或者是文件夹
@Test
public void FileJudgeTest(){
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
//判断是否是文件
System.out.println("文件:"+file1.isFile());
//判断是否是文件夹
System.out.println("文件夹:"+file1.isDirectory());
//判断是否存在
System.out.println("文件或文件夹是否存在:"+file1.exists());
System.out.println("===================");
File file2 = new File("C:\\Users\\Desktop\\lt\\b");
//判断是否是文件
System.out.println("文件:"+file2.isFile());
//判断是否是文件夹
System.out.println("文件夹:"+file2.isDirectory());
//判断是否存在
System.out.println("文件或文件夹是否存在:"+file2.exists());
System.out.println("===================");
File file3 = new File("C:\\Users\\Desktop\\lt\\b\\y");
System.out.println("文件或文件夹是否存在:"+file3.exists());
System.out.println("===================");
}
8.获取文件名称
//获取文件名称
@Test
public void FileGetName(){
//获取file对象 文件
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
//获取文件名称
String name1 = file1.getName();
System.out.println(name1);
//获取file对象 文件夹
File file2 = new File("C:\\Users\\Desktop\\lt\\b");
//获取文件夹名称
String name2 = file2.getName();
System.out.println(name2);
}
9.获取文件大小
//获取文件大小
@Test
public void FileGetSize(){
//获取file对象 文件
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
long length1 = file1.length();
System.out.println(length1);
//获取file对象 文件夹
//这里会有问题 file直接获取文件夹大小获取的是文件夹占的空间的大小 并不是文件夹下所有文件的大小
//文件使用file的length方法总是为0
File file2 = new File("C:\\Users\\Desktop\\lt\\b");
long length2 = file2.length();
System.out.println(length2);
}
10.获取文件的绝对路径
//获取文件绝对路径
@Test
public void FileGetAbsoluteUrl(){
//获取file对象 文件
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
String path1 = file1.getPath();
System.out.println(path1);
//获取file对象 文件夹
File file2 = new File("C:\\Users\\Desktop\\lt\\b");
String path2 = file2.getPath();
System.out.println(path2);
}
11.得到父目录文件
//得到上一级父目录文件
@Test
public void FileGetFather(){
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
//得到父级路径
String parent = file1.getParent();
//得到父文件
File parentFile = file1.getParentFile();
}
12.得到文件最后一次修改的时间
//得到文件最后一次修改的时间
@Test
public void FileGetFinallyUpdateTime(){
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
//获取最后得到修改时间
long l = file1.lastModified();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(new Date(l)));
}
三、一些使用场景
1.获取文件夹里面所有的文件路径
//获取文件夹里面所有的文件路径
@Test
public void FileGetCatalogueSon(){
//根据路径得到一个file对象
File file = new File("C:\\Users\\Desktop\\lt\\b");
//得到文件夹下面所有文件的名称
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
//得到文件夹下面所有的文件
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1.getPath());
}
}
2.判断文件尾椎
//判断文件的尾椎 这里通过string的从后模糊匹配去做
@Test
public void FileGetTrail(){
//获取file对象 文件
File file1 = new File("C:\\Users\\Desktop\\lt\\a.txt");
//获取文件名称
String name1 = file1.getName();
//从前模糊匹配
System.out.println(name1.startsWith(".txt"));
//从后模糊匹配
System.out.println(name1.endsWith(".txt"));
System.out.println(name1.endsWith(".jpg"));
System.out.println(name1);
}
3.获取盘符大小
//获取盘符的总大小
@Test
public void FileDriveSize(){
//获取file对象 文件
File file1 = new File("C:\\Users");
//getTotalSpace获取当前文件所在盘符的大小 单位为字节 注意:如果文件或文件不存在就会打印大小为0
long totalSpace = file1.getTotalSpace();
//打印字节
System.out.println(totalSpace);
//打印GB
System.out.println(totalSpace/1024/1024/1024);
}
4.获取盘符剩余大小
//获取盘符的剩余大小
@Test
public void FileDriveSizeResidue(){
//获取file对象 文件
File file1 = new File("C:\\Users");
//getFreeSpace获取当前文件所在盘符的大小 单位为字节 注意:如果文件或文件不存在就会打印大小为0
long totalSpace = file1.getFreeSpace();
//打印字节
System.out.println(totalSpace);
//打印GB
System.out.println(totalSpace/1024/1024/1024);
// file1.listFiles(a->{ if (a.isFile()&&a.getName()){};return false;});
}
5.文件尾椎过滤器
//文件尾椎过滤器
@Test
public void FileRrailFilter(){
File file = new File("C:\\Users\\Desktop\\lt");
File[] files1 = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isFile() && pathname.getName().endsWith(".zip")) {
return true;
}
return false;
}
});
System.out.println(files1.length);
//因为FileFilter是函数式接口所以可以通过拉姆达表达式进行简化
File[] files2 = file.listFiles(a -> { if (a.isFile() && a.getName().endsWith(".zip")) { return true; }return false; });
System.out.println(files2.length);
}