File类
1.概述:File类是java.io包中唯一代表磁盘文件本身的对象,文件和目录路径名的抽象表示形式
2.作用:常用于IO流中,可通过调用File类中的方法,实现创建、删除、重命名文件等操作
3.常用的构造方法:
(1)public File(String pathname)给定路径名以字符串来表示当前这个文件或者文件夹(开发中推荐使用第一种构造方法)
(2)public File(String parent,String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File对象
(3)public File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
(2)public File(String parent,String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File对象
(3)public File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
例:
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//创建一个File实例
//方式1
File file = new File("Q:\\java_FileDemo\\a.txt") ;
System.out.println(file);
//方式2
File file2 = new File("Q:\\java_FileDemo", "b.txt") ;
System.out.println(file2);
//方式3
File file3 = new File("Q:\\java_FileDemo") ;
File file4 = new File(file3, "c.txt") ;
System.out.println(file4);
}
}
4.File类中的成员方法(创建文件或文件夹)
(1)public boolean mkdir()创建此抽象路径名指定的目录(文件夹)(若已存在这个目录,则不会再创建)
(2)public boolean createNewFile()创建文件(
如果已经有这个文件了,不在创建
)
注:该方法本身就会出现编译时期异常:IOException
(3)public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录(创建文件夹,文件夹不存在,才开始创建)
注:没有带盘符,默认到当前项目下创建文件或者文件夹
例:
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
//创建一个File对象来封装当前这个文件夹,描述这个文件夹的抽象路径 public boolean mkdir()
//在Q盘下创建一个新的文件夹java_FileTest
File file = new File("Q:\\java_FileTest") ;
boolean flag = file.mkdir();
System.out.println("mkdir:"+flag);
//public boolean createNewFile() 创建文件
File file2 = new File("Q:\\java_FileTest\\a.java") ;
boolean flag2 = file2.createNewFile();
System.out.println("createNewFile:"+flag2);
//public boolean mkdirs() 创建目录a-->b-->c
File file3 = new File("Q:\\java_FileTest\\test\\demo\\aa") ;
boolean flag3 = file3.mkdirs();
System.out.println("mkdirs:"+flag3);
//没有带盘符,默认到当前项目下创建了文件
File file4 = new File("a.txt") ;
boolean flag4 = file4.createNewFile();
System.out.println("createNewFile:"+flag4);
}
}
5.File类中的成员方法(删除):
public boolean delete() 删除此抽象路径名表示的文件或目录
注:删除的方法不能删除带有目录或者文件的文件夹
删除多个目录,必须逐一删除
删除多个目录,必须逐一删除
例:
import java.io.File;
import java.io.IOException;
public class FileDemo1 {
public static void main(String[] args) throws IOException {
//在Q盘下创建aaa\\bbb\\ccc
File file = new File("Q:\\aaa\\bbb\\ccc") ;
System.out.println("mkdirs:"+file.mkdirs());
//创建文件a.txt
File file1 = new File("Q:\\aaa\\bbb\\ccc\\a.txt") ;
file1.createNewFile();
//删除之前创建路径下的a.txt文件
File file2 = new File("Q:\\aaa\\bbb\\ccc\\a.txt") ;
System.out.println("delete:"+file2.delete());
//删除Q盘下的aaa\\bbb\\ccc
File file3 = new File("Q:\\aaa\\bbb\\ccc");
file3.delete();
File file4 = new File("Q:\\aaa\\bbb");
file4.delete();
File file5 = new File("Q:\\aaa");
file5.delete();
}
}
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件
注:1)使用这个功能:当两个抽象路径一致,那么只是重命名
2)当这两个抽象路径不一致,有剪切并且可以改名
2)当这两个抽象路径不一致,有剪切并且可以改名
例:
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
//描述Q盘下的Demo.txt
File file = new File("Q:\\Demo.txt") ;
//使用重命名功能:public boolean renameTo(File dest)
File file2 = new File("Q:\\Test.txt") ;
System.out.println(file.renameTo(file2));
//将Q盘下的Test.txt剪切到E:\\Media\\Test.txt(并且可以改名)
File file3 = new File("Q:\\Test.txt") ;
File file4 = new File("E:\\Media\\Demo.txt") ;
file3.renameTo(file4) ;
}
}
7.File类中的成员方法(判断功能)
*(1)public boolean isDirectory():判断是否是文件夹
*(2)public boolean isFile():判断是否是一个标准文件
*(3)public boolean exists():测试此抽象路径名表示的文件或目录是否存在
(4)public boolean canRead():判断是否可读
(5)public boolean canWriter():判断是否可写
(6)public boolean isHidden():判断是否是隐藏文件
(7)public boolean isAbsolute():判断此路径名是否是绝对路径
(4)public boolean canRead():判断是否可读
(5)public boolean canWriter():判断是否可写
(6)public boolean isHidden():判断是否是隐藏文件
(7)public boolean isAbsolute():判断此路径名是否是绝对路径
8.File类中的成员方法(获取功能)
(1)public File getAbsolutePath():获取当前文件或者文件夹绝对路径
(2)public String getPath():获取相对路径
(3)public long length()返回由此抽象路径名表示的文件的长度
(4)public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
(5)public String getName():获取名称
(2)public String getPath():获取相对路径
(3)public long length()返回由此抽象路径名表示的文件的长度
(4)public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
(5)public String getName():获取名称
例:
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDemo1 {
public static void main(String[] args) {
File file = new File("Q:\\aa\\java.txt");
//获取绝对路径
System.out.println(file.getAbsolutePath());
//获取相对路径
System.out.println(file.getPath());
//文件长度
System.out.println(file.length());
//最后一次修改时间
System.out.println(file.lastModified());
//获取名称
System.out.println(file.getName());
Date d = new Date(1511284169686L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
String dateStr = sdf.format(d) ;
System.out.println(dateStr);
}
}
9.File类的高级获取功能:
(1)public String[] list()返回对象是一个字符串数组,当前盘符下的所有的文件以及文件夹的字符串名称数组
(2)public File[] listFiles()返回对象是一个File数组,当前盘下的所有的文件以及文件夹的File数组
(1)public String[] list()返回对象是一个字符串数组,当前盘符下的所有的文件以及文件夹的字符串名称数组
(2)public File[] listFiles()返回对象是一个File数组,当前盘下的所有的文件以及文件夹的File数组
例:
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
//需求:获取e盘下所有的文件夹以及文件的字符串名称数组
File file = new File("E:\\") ;
//public String[] list()
String[] strArray = file.list() ;
//遍历:遍历之前,一定要做非空判断
if(strArray!=null){
//增强for遍历
for(String s:strArray){
System.out.println(s);
}
}
System.out.println("------------------------------------------");
//public File[] listFiles():
File[] fileArray = file.listFiles() ;
if(fileArray !=null){
for(File f :fileArray){
System.out.println(f.getName());
}
}
}
}
10.文件过滤器:
(1)public String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录
(2)public File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
(2)public File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
注:参数是一个接口(开发中使用的接口的匿名内部类的方式)
实现一个方法:boolean accept(File dir, String name):这个方法的返回值是true(就是表示要将当前文件夹或者文件的名称添加数组中),false(表示不添加数组中)
实现一个方法:boolean accept(File dir, String name):这个方法的返回值是true(就是表示要将当前文件夹或者文件的名称添加数组中),false(表示不添加数组中)
例:
//需求:判断E盘目录下是否有后缀名为.txt的文件,如果有就输出此文件名称
import java.io.File;
import java.io.FilenameFilter;
//方式1:使用public String[] list(FilenameFilter filter) 文件过滤器
public class FileDemo1 {
public static void main(String[] args) {
//1)封装e盘
File file = new File("e:\\") ;
//2)public String[] list(FilenameFilter filter)
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file = new File(dir, name) ;
//判断File是否是文件
boolean flag1 = file.isFile() ;
//如果是文件,还要判断是否以".txt"结尾
boolean flag2 = name.endsWith(".txt") ;
return flag1 && flag2 ;
//return new File(dir,name).isFile() && name.endsWith(".txt") ;
}
});
//遍历字符串数组
for(String s : strArray){
System.out.println(s);
}
}
}
//方式二:使用public File[] listFiles()方法转成数组进行遍历
public class FileDemo1 {
public static void main(String[] args) {
File srcFile = new File("e:\\") ;
//2)获取当前e盘下的所有的文件以及文件夹的File数组
File[] fileArray = srcFile.listFiles() ;
//3)给当前对象判断
if(fileArray !=null){
//增强for遍历这个File数组
for(File file :fileArray){
//获取到每一个file对象
if(file.isFile()){
//是文件
//要需要判断是否以.txt结尾的文件
if(file.getName().endsWith(".txt")){
System.out.println(file.getName());
}
}
}
}
}
}