文件(File类)
一、File类的概述和构造方法
1.File类的概述
文件和目录路径名的抽象表示形式
这个File类可以用来表示文件,也可以用来表示目录
2.构造方法
File(String pathname):根据一个路径得到File对象
路径:
绝对路径:带有盘符号的详细路径
相对路径:不带有盘符号的路径
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
3.案例演示
//通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例;
File file = new File ("D:\\IntelliJIDEA2018.2.8_install\\bin\\idea.exe.vmoptions");//绝对路径
File file1 = new File("F:\\abc");
//相对路径:项目文件夹的根目录
File file2 = new File("a.txt");
//File(String parent, String child)
//根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例;
//参数1,是父路径,参数2,是子文件名
File file3 = new File("D:\\IntelliJIDEA2018.2.8_install\\bin\\", "idea.exe.vmoptions");
//File(File parent, String child)
//根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例;
//这里的parent是文件类型的;
File file4 = new File("D:\\IntelliJIDEA2018.2.8_install\\bin\\");
File file5 = new File(file4, "idea.exe.vmoptions");
}
二、File类的创建功能
1.创建功能
public boolean createNewFile():创建一个新的文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了;注意这个方法只能
创建单层目录,如果创建多层目录就需要一层一层去创建
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 可以创建多层目
录,也可以创建单层目录
2.案例演示
File file = new File("E:\\ccc.txt");
//创建文件,返回值的意思是,文件是否创建成功
//第一次创建改文件时,创建成功返回true
//文件已经存在,你重复创建返回false
boolean b = file.createNewFile();
System.out.println(b);
File file1 = new File("a.txt"); //此时会在你的当前项目下创建一个文件;
//注意事项:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
file1.createNewFile();
File file = new File("E:\\demo");
//创建目录
//文件夹和文件的关系:笔筒和笔
//返回值是:目录是否创建成功
//若重复创建目录,返回false
boolean b = file.mkdir(); //创建单级目录
System.out.println(b);
File file2 = new File("E:\\demo2\\aaa\\bbb");
//创建单级或多级目录
boolean mkdir = file2.mkdirs();
System.out.println(mkdir);
三、File类的删除功能
1.删除功能
public boolean delete():删除文件或者文件夹
注意:删除文件夹时,这个文件夹必须是空文件夹;如果这个文件夹里面有文件,则不能删除
2.案例演示
注意事项:Java中的删除不走回收站。要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
File file = new File("E:\\ccc.txt");
//返回值,代表是否删除成功
boolean b = file.delete();
System.out.println(b);
File file1 = new File("a.txt");
boolean delete = file1.delete();
System.out.println(delete);
//删除这个目录
File file2 = new File("E:\\demo");
boolean delete1 = file2.delete();
System.out.println(delete1);
//删除多级目录
File file3 = new File("E:\\demo2");
boolean delete2 = file3.delete();
System.out.println(delete2);
删除多级目录:delete() 不能直接删除多级目录,如果 你想要删除多级目录,你可以使用递归来递归删除
import java.io.File;
public class Demo1 {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\pictures");
deletFiles(file);
}
private static void deletFiles(File file) {
File[] files = file.listFiles();
for (File f : files) {
if(!f.isFile()) {
deletFiles(f);
}else {
f.delete();
}
}
file.delete();
}
}
四、File类的重命名功能
1.重命名功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
2.案例演示
注意事项:
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
// renameTo(file1); 这个方法有两个功能
//一个可以重命名:你传入的这个新文件,和新文件的路径一致,只是文件名不一样了,就会重命名
//一个可以剪切:你传入的这个新文件,和旧文件路径不一致,就会把旧文件剪切走
File file = new File("b.txt");
File file1 = new File("abc.txt");
boolean b = file.renameTo(file1); //返回值是否重名成功
System.out.println(b);
System.out.println("====================");
File file2 = new File("abc.txt");
File file3 = new File("E:\\abc.txt");
file2.renameTo(file3);
五、File类的判断功能
1.判断功能
public boolean isDirectory(): 判断是否是目录
public boolean isFile(): 判断是否是文件
public boolean exists(): 判断是否存在
public boolean canRead(): 判断是否可读
public boolean canWrite(): 判断是否可写
public boolean isHidden(): 判断是否隐藏
public boolean isAbsolute(); 判断是否使用的是绝对路径
2.案例演示
File file = new File("C:\\Users\\ShenMouMou\\Desktop\\aa.txt");
boolean b = file.canRead();
boolean b1 = file.canWrite();
System.out.println(b);
System.out.println(b1);
//判断文件是否隐藏
boolean hidden = file.isHidden();
System.out.println(hidden);
//file.canExecute(); Linux 下判断文件是否可执行
boolean absolute = file.isAbsolute(); //判断是否是绝对路径
System.out.println(absolute);
boolean absolute1 = new File("b.txt").isAbsolute();
System.out.println(absolute1);
File file = new File("abc.txt");
boolean file1 = file.isFile();
System.out.println(file1);
//判断是否是目录
boolean directory = file.isDirectory();
System.out.println(directory);
File abc = new File("abc");
boolean directory1 = abc.isDirectory();
System.out.println(directory1);
六、File类的获取功能
1.获取功能
public String getAbsolutePath(): 获取绝对路径
public String getPath(): 获取相对路径
public String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定
父目录,则返回 null。
public File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定
父目录,则返回 null。
public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节
public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量
单位字节
public String getName(): 获取名称
public long length(): 获取长度:字节数
public long lastModified(): 获取最后一次的修改时间,毫秒值
public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组
2.案例演示
File file = new File("C:\\Users\\ShenMouMou\\Desktop\\aa.txt");
//获取文件的长度,获取的是文件的字节数
long length = file.length();
System.out.println(length);
//获取文件名
String name = file.getName();
System.out.println(name);
//获取文件的父路径,返回的是字符串形式
String parent = file.getParent();
System.out.println(parent);
//获取文件的父路径,返回的是File类型,更加灵活
File parentFile = file.getParentFile();
String s = parentFile.toString();
System.out.println(s);
//获取文件的绝对路径,返回的的File形式,更加灵活
File absoluteFile = file.getAbsoluteFile();
//获取文件的绝对路径,返回的是字符串形式
String absolutePath = file.getAbsolutePath();
System.out.println(absoluteFile.toString());
System.out.println(absolutePath);
//获取相对路径
File file1 = new File("b.txt");
String path = file1.getPath();
System.out.println(path);
/*
File file = new File("abc.txt");
//判断文件或目录是否存在
boolean exists = file.exists();
if(!exists){
file.createNewFile();
}
*/
public class Demo {
public static void main(String[] args) {
File file = new File("E:\\");
//获取磁盘的总大小,单位字节
long totalSpace = file.getTotalSpace();
System.out.println((totalSpace/1024/1024/1024.0) +" GB");
//获取剩余容量
long freeSpace = file.getFreeSpace();
System.out.println((freeSpace / 1024 / 1024 / 1024.0) + " GB");
//已用容量=磁盘的总大小-剩余容量
}
}
public class Demo {
public static void main(String[] args) {
//获取文件的最后一次修改时间
File file = new File("C:\\Users\\Desktop\\img.png");
//单位是毫秒值
long time= file.lastModified();
//把毫秒值,转换成年月日,时分秒
Date date = new Date(time);
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println(format);
}
}
3.输出指定目录下指定后缀的文件名
需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
分析:
a: 把E:\img这个路径封装成一个File对象
b: 获取该路径下所有的文件或者文件夹对应的File数组
c: 遍历这个数组,进行判断
public class MyTest {
public static void main(String[] args) {
File file = new File("E:\\img");
String[] list = file.list();
for (String s : list) {
//System.out.println(s);
File file1 = new File(file, s);
if(file1.isFile()&&file1.getName().endsWith(".jpg")){
System.out.println(file1.getName());
}
}
}
}
七、文件名称过滤器的概述及使用
1.文件名称过滤器的概述
public String[] list(FilenameFilter filter):获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles(FilenameFilter filter):获取指定目录下的所有文件或者文件夹的File数组
2.文件名称过滤器的使用:
需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
分析:
- a: 把E:\demo这个路径封装成一个File对象
- b: 获取所有的以.jpg结尾的文件数组 (相当于过滤)
- c: 遍历数组
import java.io.File;
import java.io.FileFilter;
public class Demo5 {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\pictures");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isFile() && f.getName().endsWith(".jpg")) {
return true;
} else {
return false;
}
}
});
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
}
}
八、修改多级目录下的指定文件的后缀名
import java.io.File;
public class Demo2 {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\pictures");
//使用递归方法
renameFiles(file);
}
private static void renameFiles(File file) {
File[] files = file.listFiles();
for (File f : files) {
if(!f.isFile()) {
renameFiles(f);
}else if(f.isFile() && f.getName().endsWith(".mp4")) {
String s = f.getName().substring(15);
File file1 = new File(f.getParentFile(), s);
f.renameTo(file1);
System.out.println(file1.getAbsolutePath());
}
}
}
}