File类及其常用方法
在Java中会有很多地方需要进行文件操作方,File类是Java处理文件的一个类,有不少操作都是基于这个类的,该类直接继承自Object类,文件和目录路径名的抽象表现形式;该类的实例是不可变的,一旦创建由File对象表示的抽象路径名永远不会改变;
File类翻译的是文件用于表达java中的路径名,代表物理盘符中的一个文件或者文件夹
1. File类的构造方法
- File(String pathname):通过将给定路径的名字转换为抽象路径名来创建新的File实例
- File(String parent, String child):创建从父路径名的字符串和一个孩子的一个新的File实例文件;参数1:指定的目录名称 参数2:子路径
- File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的File实例
public static void main(String[] args) {
//File(String pathname) (推荐这种方式表示一个文件或者目录的抽象表现形式!)
File file1 = new File("d:\\123\\123.txt");
//File(String parent, String child):参数1:指定的目录名称 参数2:子路径
File file2 = new File("d:\\123","123.txt");
//File(File parent, String child)
File file3 = new File("d:\\demo");
File file4 = new File(file3,"123.txt");
}
2. 创建功能
- public boolean createNewFile() IOException:表示创建文件,如果文件已经存在了不会创建,true:表示创建成功;
- public boolean mkdir():创建目录(文件夹),如果文件夹(目录)已经存在了,不会创建,mkdir()只会建立一级的文件夹
- public boolean mkdirs():创建目录(文件夹),如果不存在目录(文件夹),就会创建,mkdirs()可以建立多级文件夹
public static void main(String[] args) throws IOException {
//创建File对象:描述当前路径
File file = new File("d:\\kaka.txt");
System.out.println("createNewFile():" + file.createNewFile());
//创建目录(文件夹),只会建立一级的文件夹
File file2 = new File("d:\\test_01") ;
System.out.println("mkdir():"+file2.mkdir());
//表示创建文件,如果文件已经存在了,不会创建
File file3 = new File("d:\\test_01\\bb.txt") ;
System.out.println(file3.createNewFile());
//创建一个文件没有带盘符在当前项目路径下
File file4 = new File("a.txt") ;
System.out.println(file4.createNewFile());
//mkdirs():可以建立多级文件夹
File file5 = new File("aa\\bb\\cc") ;
System.out.println(file5.mkdirs());
}
注:
在某个文件夹(目录)下创建文件的话,前提是存在这个文件夹
最终创建出来的是一个文件还是文件夹,不取决于路径名称取决于调用的什么方法去创建;
3. 删除功能
- public boolean delete():删除由此抽象路径名表示的文件或目录
public static void main(String[] args) {
//删除d:\\kaka.txt这个文件
File file = new File("d:\\kaka.txt");
System.out.println("delete:" + file.delete());
//要删除aa\bb\cc目录
//File file2 = new File("aa\\bb\\cc");cc这个目录不为空,没有办法直接删除
File file2 = new File("aa\\bb\\cc\\aa.txt");
System.out.println(file2.delete());//删除aa.txt
File file3 = new File("aa\\bb");//cc的父路径
File file4 = new File(file3,"cc");//代表cc
System.out.println(file4.delete());
}
注:
- 如果此路径名表示目录,则目录必须为空才能删除
- 既可以删除文件,也可以删除文件夹
- 删除时直接删除,没有经过回收站
4. 重命名功能
- public boolean renameTo(File dest):重命名文件
public static void main(String[] args) {
//第一种情况:重命名
File fileStr1 = new File("d:\\kaka.txt") ;
File fileStr2 = new File("d:\\卡卡.txt");
System.out.println("renameTo():"+fileStr1.renameTo(fileStr2)) ;
//第二种情况:重命名并且剪切
File fileStr3 = new File("d:\\kaka.txt") ;
File fileStr4 = new File("卡卡.txt") ;
System.out.println("renameTo()"+fileStr3.renameTo(fileStr4));
}
注:
- 目标File对象描述的文件路径和当前原文件路径一致:重命名
- 目标File对象描述的文件路径和当前原文件路径不一致:重命名且剪切
5. 判断功能
- public boolean isDirectory() :判断当前File对象描述路径形式是否是一个文件夹
- public boolean isFile():判断是否是文件
- public boolean exists():判断是否存在
- public boolean canRead():判断是否可读
- public boolean canWrite():判断是否可写
- public boolean isHidden():判断是否隐藏
public static void main(String[] args) {
//创建File对象
File file = new File("a.txt");
System.out.println(file.isDirectory());//false
System.out.println(file.isFile());//true
System.out.println(file.exists());//true
System.out.println(file.canRead());//true
System.out.println(file.canWrite());//true
System.out.println(file.isHidden());//false
}
6. 获取功能
6.1 获取路径
- public String getAbsolutePath():绝对路径
- public String getPath():相对路径(当前项目的路径)
- public String getName():获取文件或目录的名称,如果路径名的名字序列为空,则返回空字符串
public static void main(String[] args) {
//创建File对象
File file = new File("a.txt");
//D:\JavaOffline\Willing\work_space\JavaSE_2020_6_23\a.txt
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());//a.txt
System.out.println(file.getName());//a.txt
}
6.2 获取文件的内容
- public long length():获取当前文件内容的长度
public static void main(String[] args) {
//创建File对象
File file = new File("a.txt");
System.out.println(file.length());//4
}
注:
- 只可以对文件使用,不可对文件夹进行操作
6.3 获取最后一次修改的时间
- public long lastModified():最后一次修改文件的文件的时间毫秒值
public static void main(String[] args) {
//创建File对象
File file = new File("a.txt");
System.out.println(file.lastModified());//1592918354720
//long-- Date-->String类型日期文本 (格式化)
//创建日期格式对象
long time = 1592918354720L;
Date date = new Date(time);
//Date----->String日期文本格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);
System.out.println(dateStr);//2020-06-23 21:19:14
}
6.4 获取文件夹中内容的方法
- public File[] listFiles(): 以File对象的形式返回当前路径下的所有文件和文件夹名称
- public String[] list() : 以字符串的形式返回当前路径下所有的文件和文件夹的名称
public static void main(String[] args) {
File file = new File("H:\\") ;
//public File[] listFiles()
File[] fileArray = file.listFiles() ;
//防止空指针异常
if(fileArray !=null) {
//遍历File数组
for(File f :fileArray) {
//获取所有名称
System.out.println(f.getName());
}
}
//public String[] list()
String[] strArray = file.list() ;
if(strArray !=null) {
for(String s : strArray) {
System.out.println(s);
}
}
}
7. 获取以 .txt 为后缀的文件
需求:
- 获取所有在D盘中的后缀名为.txt结尾的文件的文件名
7.1 方式一
通过public File[] listFiles()遍历File数组实现
public static void main(String[] args) {
//路径封装成File对象
File file = new File("d:\\");
File[] fileArray = file.listFiles();
if(fileArray != null){
//遍历获取每一个字符串对象
for(File f : fileArray){
//判断是否是文件
if(f.isFile()){
//是否以.jpg结尾
if(f.getName().endsWith(".txt")){
System.out.println(f.getName());
}
}
}
}
}
7.2 方式二
通过文件名称过滤器FilenameFilter:接口实现
- public String[] list(FilenameFilter filter) :获取指定目录下的所有的文件以及文件夹的列表
- public File[] listFiles(FilenameFilter filter) :使用文件名称过滤器将所有目录以及文件存储到File数组中
- boolean accept(File dir, String name):是否将指定File对象下的文件添加到列表中,如果是true则添加到列表中
public static void main(String[] args){
File file = new File("d:\\") ;
//获取的时候,就已经得到列表
String[] strArray = file.list(new FilenameFilter(){
//参数1:File对象 参数2:文件名称
public boolean accept(File dir, String name){
File file = new File(dir,name);
//判断file是否是文件
boolean flag1 = file.isFile();
boolean flag2 = name.endsWith(".txt");
return flag1 && flag2;
}
}) ;
for(String s : strArray){
System.out.println(s);
}
}
- 一步完成:
return new File(dir,name).isFile() && name.endsWith(".txt") ;