File类
(1)文件类的作用
在Java程序中,对磁盘文件进行描述的类。文件或目录路径的抽象表示形式。在 java.io 包中。
(2)构造方法
构造方法 | 描述 |
File(File parent, String child) | 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 |
File(String pathname) | 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 |
File(String parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
(3)属性
属性 | 描述 |
static String pathSeparator: | 与系统有关的路径分隔符,为了方便,它被表示为一个字符串(;)。 |
static char pathSeparatorChar: | ; |
static String Separator: | 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串(\)。 |
static char SeparatorChar: | \ |
(4)常用方法
1)操作文件
构造方法:
//创建文件,不会验证文件是否存在
//使用绝对路径
File file_1 = new File("C:\\Users\\Administrator\\Desktop\\test.txt");
//使用相对路径,在项目根目录下
File file_2 = new File("test.txt");
//指定父路径和子路径
String parentPath = "C:\\Users\\Administrator\\Desktop";
File file1 = new File(parentPath,"test_1.txt");
System.out.println(file_1.toString());
System.out.println(file_2.toString());
System.out.println(file_3.toString());
创建文件:createNewFile()
//创建文件,先判断文件是否存在
if(!file.exists()){
//返回值
boolean b = file.createNewFile();
System.out.println("创建结果:"+b);
}else{
System.out.println("文件已存在");
}
删除文件:delete() 和 deleteOnExit()
文件不存在时返回false
//删除文件
boolean b = file.delete();
System.out.println("删除结果:"+b);
//退出JVM时删除文件
Thread.sleep(5000);
file.deleteOnExit();
判断:
System.out.println("是否可执行:"+file.canExecute());//windows下不支持,永远为true
System.out.println("是否可读:"+file.canRead());//windows下不支持,永远为true
System.out.println("是否可写:"+file.canWrite());
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否是隐藏文件:"+file.isHidden());
System.out.println("是否是绝对路径:"+file.isAbsolute());
获取:
System.out.println("获取绝对路径:"+file.getAbsolutePath());
System.out.println("获取规范路径:"+file.getCanonicalPath());//跟绝对路径差不多,字母大写
System.out.println("获取绝对路径:"+file.getName());//只获取文件名
System.out.println("获取路径:"+file.getPath());//相当于绝对路径
System.out.println("获取文件长度:"+file.length());
System.out.println("获取最后修改时间:"+file.lastModified());//单位毫秒,1970年始
System.out.println("获取最后修改时间:"+new Date(file.lastModified()).toLocaleString());
2)操作目录
创建:mkdir() 和 mkdirs()
如果是多级目录,使用 mkdir() 创建时会返回 false
//目录
File dir = new File("C:\\Users\\Administrator\\Desktop\\Suxing\\test");
//创建文件夹
if(!dir.exists()){
System.out.println("创建结果"+dir.mkdirs());//创建多级目录
//file.mkdir();//只能创建一级目录
}else{
System.out.println("目录已存在");
}
删除目录:
目录的删除和文件的删除一样,但是删除目录时,只能删除最里面的一个目录,而且此目录必须为空。
//删除目录
System.out.println("删除目录"+dir.delete());
//JVM删除
dir.deleteOnExit()
判断:
其他判断方法 同操作文件的方法用法相同,此处不再列举。
System.out.println("是否是文件夹:"+dir.isDirectory());
获取:
获取文件夹的相关信息同获取文件的信息方法相同,对于文件夹,还可以获取文件夹中一级目录下的所有文件和文件夹,
获取文件夹中一级目录下的所有文件和文件夹(没有过滤器):
//获取文件夹中的所有文件和目录
String[] myDir = dir.list();//不过滤
for(String str:myDir){
System.out.print(str+",");
}
//获取文件夹中的所有文件和目录
File[] files = dir.listFiles();//不过滤
for(File file:files){
System.out.print(file.getName()+",");
}
使用过滤器获取文件夹中一级目录下的所有指定类型的文件:
//文件过滤器
String[] myDir = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if(name.endsWith(".txt"))
return true;
return false;
}
});
for(String str:myDir){
System.out.print(str+",");
}
使用Lambda表达式实现:
FilenameFilter filenameFilter =(myDir,name)-> {
if(name.endsWith(".txt"))
return true;
return false;
};
String[] myDir = dir.list(filenameFilter);
for(String str:myDir){
System.out.print(str+",");
}
上述代码通过匿名内部类,实现了一个文件过滤器接口,满足条件的文件返回 true 否则返回false。
FilenameFilter源码:
package java.io;
@FunctionalInterface
public interface FilenameFilter {
boolean accept(File dir, String name);
}
重命名(也可实现剪切功能):
//重命名,该方法可以实现剪切。剪切目录时,该目录必须为空
boolean b = dir.renameTo(new File("C:\\Users\\Administrator\\Desktop\\test_1.txt"));