File类
1. File类的概述:文件和目录路径名的抽象表示形式。File类既可以表示文件,也可以表示目录
2. 绝对路径和相对路径
(1)绝对路径:带有盘符号的一个详细路径
(2)相对路径:不带有盘符号的路径,Java程序当中这个相对路径指的是项目的根路径下
3. 构造方法
public class TestDemo01 {
public static void main(String[] args) {
//File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新File实例
File file = new File("C:\\Users\\Public\\Desktop\\test.txt");
System.out.println(file); //C:\Users\Public\Desktop\test.txt
//File(File parent, String child):根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
//参数1:父路径的File类型 参数2:子文件名
File fuPath = new File("C:\\Users\\Public\\Desktop");
File ziFile = new File(fuPath, "aaa.txt");
System.out.println(ziFile); //C:\Users\Public\Desktop\aaa.txt
//File(String parent, String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
//参数1:父路径的String类型 参数2:子文件名
File file1 = new File("C:\\Users\\Public\\Desktop", "bbb.txt");
System.out.println(file1); //C:\Users\Public\Desktop\bbb.txt
}
}
4. File类的常见功能
(1)创建功能
public class TestDemo01 {
public static void main(String[] args) throws IOException {
//public boolean createNewFile():创建一个新的文件 如果存在这样的文件,就不创建了
File file1 = new File("E:\\test.txt");
boolean b1 = file1.createNewFile(); //在E盘创建了一个test.txt的文件
System.out.println(b1); //true
//public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了.注意这个方法只能创建单层目录,如果创建多层目录得一层一层创建
File file2 = new File("E:\\lol");
boolean b2 = file2.mkdir(); //在E盘创建了一个lol的文件夹
System.out.println(b2); //true
//public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来,可以创建多层目录,当然也可以创建单层目录
File file3 = new File("E:\\wegame\\lol\\yingliu");
boolean b3 = file3.mkdirs(); //在E盘创建一个wegame的文件夹,里面有lol子文件夹,lol里面有yingliu子文件夹
System.out.println(b3); //true
}
}
(2)删除功能
public class TestDemo02 {
public static void main(String[] args) {
/**
* public boolean delete():删除文件或者文件夹
* 注意:删除文件夹时 这个文件夹是空文件夹 如果这个文件夹里面有文件,则不能删除
* Java中的删除不走回收站。要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
*/
File file1 = new File("E:\\test.txt");
boolean b1 = file1.delete();
System.out.println(b1); //true
File file2 = new File("E:\\lol");
boolean b2 = file2.delete();
System.out.println(b2); //true
}
}
(3)重命名功能
public class TestDemo03 {
public static void main(String[] args) throws IOException {
/**
* public boolean renameTo(File dest):把文件重命名为指定的文件路径
* 如果路径名相同,就是改名。
* 如果路径名不同,就是改名并剪切
*/
File oldFile = new File("lol.txt");
oldFile.createNewFile();
//路径名相同
File newFile = new File("wegame.txt");
boolean b = oldFile.renameTo(newFile); //重命名
System.out.println(b);
//路径名不同
File newFile2 = new File("E:\\haha.txt");
boolean b1 = oldFile.renameTo(newFile2); //在E盘里面就有一个haha.txt文件
System.out.println(b1);
}
}
(4)判断功能
public class TestDemo01 {
public static void main(String[] args) {
//public boolean isDirectory(): 判断是否是目录
File file1 = new File("lol666");
boolean b1 = file1.isDirectory();
System.out.println(b1); //true
//public boolean isFile(): 判断是否是文件
File file2 = new File("wegame.txt");
boolean b2 = file2.isFile();
System.out.println(b2); //true
//public boolean exists(): 判断是否存在
File file3 = new File("lol.txt");
boolean b3 = file3.exists();
System.out.println(b3); //false
//public boolean canRead(): 判断是否可读
File file4 = new File("wegame.txt");
boolean b4 = file4.canRead();
System.out.println(b4); //true
//public boolean canWrite(): 判断是否可写
File file5 = new File("haha.txt");
boolean b5 = file5.canWrite();
System.out.println(b5); //true
//public boolean isHidden(): 判断是否隐藏
File file6 = new File("haha.txt");
boolean b6 = file6.isHidden();
System.out.println(b6); //false
//public boolean isAbsolute(); 判断是否使用的是绝对路径
File file7 = new File("wegame.txt");
boolean b7 = file7.isAbsolute();
System.out.println(b7); //false
File file8 = new File("E:\\西开\\MyCode\\20200524-File类\\lol666");
boolean b8 = file8.isAbsolute();
System.out.println(b8); //true
}
}
(5)获取功能
public class TestDemo01 {
public static void main(String[] args) {
//public String getAbsolutePath(): 获取绝对路径
File file1 = new File("wegame.txt");
String str1 = file1.getAbsolutePath();
System.out.println(str1); //E:\西开\MyCode\20200524-File类\wegame.txt
//public String getPath(): 获取相对路径
File file2 = new File("wegame.txt");
String str2 = file2.getPath();
System.out.println(str2); //wegame.txt
//public String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
File file3 = new File("wegame.txt");
String str3 = file3.getParent();
System.out.println(str3); //null
//public File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null
File file4 = new File("E:\\西开\\MyCode\\20200524-File类\\haha.txt");
File str4 = file4.getParentFile();
System.out.println(str4); //E:\西开\MyCode\20200524-File类
}
}
========================================================================
public class TestDemo02 {
public static void main(String[] args) {
//public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节
//public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节
File file1 = new File("E:\\");
long totalSpace = file1.getTotalSpace();
System.out.println((totalSpace / 1024 / 1024 / 1024) + "GB"); //149GB
long freeSpace = file1.getFreeSpace();
System.out.println((freeSpace / 1024 / 1024 / 1024) + "GB"); //86GB
//public String getName(): 获取名称
//public long length(): 获取长度。字节数
File file2 = new File("wegame.txt");
String name = file2.getName();
System.out.println(name); //wegame.txt
long length = file2.length();
System.out.println(length); //0
//public long lastModified(): 获取最后一次的修改时间,毫秒值
File file3 = new File("lol666");
long lastModified = file3.lastModified();
Date date = new Date(lastModified);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println(format); //2020-05-24 22:37:31
}
}
========================================================================
public class TestDemo03 {
public static void main(String[] args) {
File file = new File("E:\\西开\\MyCode\\20200524-File类");
//public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
String[] list = file.list();
for (String str : list) {
System.out.println(str);
}
/**
* .idea
* 20200524-File类.iml
* haha.txt
* lol666
* out
* src
* wegame.txt
*/
//public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
/**
* .idea
* 20200524-File类.iml
* haha.txt
* lol666
* out
* src
* wegame.txt
*/
}
}
5. 文件名称过滤器
(1)文件名称过滤器:
- public String[] list(FilenameFilter filter)
- public File[] listFiles(FilenameFilter filter)
(2)文件名称过滤器的使用:判断"E:\西开\MyCode\20200524-File类"目录下是否有后缀名为.txt的文件,如果有,就输出该文件名称
public class TestDemo01 {
public static void main(String[] args) {
//不使用文件名称过滤器
File file = new File("E:\\西开\\MyCode\\20200524-File类");
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile() && f.getName().endsWith(".txt")){
System.out.println(f.getName()); //haha.txt wegame.txt
}
}
}
}
========================================================================
public class TestDemo02 {
public static void main(String[] args) {
//使用文件名称过滤器
File file = new File("E:\\西开\\MyCode\\20200524-File类");
//FilenameFilter 接口 文件名过滤器
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File f = new File(dir, name);
//返回false表示不符合条件,就不会过滤到File数组中,返回true表示符号条件,才会过滤到File数组中
if (f.isFile() && f.getName().endsWith(".txt")) {
return true;
} else {
return false;
}
}
});
for (File fileName : files) {
System.out.println(fileName.getName()); //haha.txt wegame.txt
}
}
}
======================================================================
public class TestDemo03 {
public static void main(String[] args) {
File file = new File("E:\\西开\\MyCode\\20200524-File类");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isFile() && pathname.getName().endsWith(".txt")){
return true;
}else {
return false;
}
}
});
for (File fileName : files) {
System.out.println(fileName.getName()); //haha.txt wegame.txt
}
}
}