File类概述及构造方法
import java.io.File;
import java.lang.reflect.Field;
/*
我们要想实现IO的操作,就必须知道硬盘上的文件表现形式
java中用一个类来供我们使用,抽象的表示硬盘上的各种文件
这个叫做File.
File: 文件和目录路径名的抽象表示。今后我们看到的目录就代表文件夹的意思。
File类的构造方法:
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
创建File对象的原因:
对想要进行操作的文件或者文件夹,将其封装成一个File对象,
然后调用该对象中的方法对文件或者文件夹进行操作
*/
public class FileDemo1 {
public static void main(String[] args) {
//File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
//将E:\数加科技\十四期\day01目录封装成一个File对象
File file = new File("E:\\数加科技\\十四期\\day01");
System.out.println(file);
//File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例
//根据一个目录和一个子文件得到一个File对象
File file1 = new File(file, "上课须知.txt");
System.out.println(file1); //File类重写了toString()方法
//File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的 File实例。
File file2 = new File("E:\\数加科技\\十四期\\day01", "上课须知.txt");
System.out.println(file2);
}
}
File类的创建功能
import java.io.File;
import java.io.IOException;
/*
创建功能
public boolean createNewFile() 结果 true如果命名文件不存在并被成功创建; false如果命名文件已经存在
当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
public boolean mkdir() 结果 true当且仅当该目录被创建时; false否则
创建由此抽象路径名命名的目录。
public boolean mkdirs() 结果 true当且仅当该目录已创建,以及所有必需的父目录; false否则
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
*/
public class FileDemo2 {
public static void main(String[] args) {
//创建File对象,其中 a.txt 是需要创建的文件
File file = new File("E:\\数加科技\\十四期\\a.txt");
//public boolean createNewFile()
//创建一个新的文件
//此时会出现编译时期异常
//boolean newFile = file.createNewFile()
boolean newFile = false;
try {
newFile = file.createNewFile();
} catch (IOException e) {
//如果我们想要创建的文件,没有指定的目录,就会报错
//IOException: 系统找不到指定的路径。
e.printStackTrace();
}
//如果指定文件已经存在,返回false
System.out.println(newFile);
//public boolean mkdir()
//在指定目录下创建文件夹
//E:\数加科技\十四期下创建一个xiaohu文件夹
//如果该文件夹已经存在,就不会创建了,返回false
File file1 = new File("E:\\数加科技\\十五期\\xiaohu");
boolean mkdir = file1.mkdir();
System.out.println(mkdir);
//public boolean mkdirs()
//创建多级文件夹
//E:\数加科技\十五期\xiaohu
File file2 = new File("E:\\数加科技\\十五期\\xiaohu");
System.out.println(file2.mkdirs());
//今后开发的时候,要搞清楚你是要创建文件还是创建文件夹
//创建文件的时候,需要添加后缀名
boolean newFile1 = false;
try {
newFile1 = file2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(newFile1);
//同一个目录下,文件和文件夹的名字不能重复
}
}
File类的删除功能
import java.io.File;
import java.lang.reflect.Field;
/*
删除功能(直接抹去,回收站里也没有)
public boolean delete() true当且仅当文件或目录被成功删除时; false否则
删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。
*/
public class FileDemo3 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\数加科技\\十五期\\xiaohu.txt");
System.out.println(file.delete());
//要想删除一个文件夹,这个文件夹里面的内容必须是空的
File file1 = new File("E:\\数加科技\\十五期\\xiaohu");
System.out.println(file1.delete());
}
}
File类的重命名功能
import java.io.File;
/*
重命名功能
public boolean renameTo(File dest) true当且仅当重命名成功; false否则
重命名由此抽象路径名表示的文件。
*/
public class FileDemo4 {
public static void main(String[] args) {
File file = new File("E:\\数加科技\\十四期\\ftm.jpg");
//public boolean renameTo(File dest)
//现在想把ftm.jpg ---> 冯提莫.jpg
//该方法需要传入一个File对象,通过匿名对象的形式
boolean b = file.renameTo(new File("E:\\数加科技\\十四期\\冯提莫.jpg"));
System.out.println(b);
}
}
File类的判断功能
import java.io.File;
/*
判断功能
public boolean isDirectory()
判断是否是一个目录
public boolean isFile()
判断是否是一个文件
public boolean exists()
判断是否存在
public boolean canRead()
判断是否可读
public boolean canWrite()
判断是否可写
public boolean isHidden()
判断是否隐藏
*/
public class FileDemo5 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\数加科技\\十四期\\冯提莫.jpg");
//public boolean isDirectory()
//判断是否是一个目录
System.out.println(file.isDirectory());
//public boolean isFile()
//判断是否是一个文件
System.out.println(file.isFile());
//public boolean exists()
//判断是否存在
System.out.println(file.exists());
//public boolean canRead()
//判断是否可读
System.out.println(file.canRead());
//public boolean canWrite()
//判断是否可写
System.out.println(file.canWrite());
//public boolean isHidden()
//判断是否隐藏
System.out.println(file.isHidden());
}
}
File类的基本获取功能及时间戳和日期的转换
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
绝对路径(完整路径):带有盘符的
相对路径:相对于一个目录开始(不带盘符的)
基本获取功能
public String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
public String getPath()
将此抽象路径名转换为路径名字符串。
public String getName() 由此抽象路径名表示的文件或目录的名称,如果此路径名的名称序列为空,则为空字符串
返回由此抽象路径名表示的文件或目录的名称。
public long length() 获取字节大小
返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。
public long lastModified() 返回的是时间戳,精确到了毫秒
返回此抽象路径名表示的文件上次修改的时间
*/
public class FileDemo6 {
public static void main(String[] args) {
//创建File对象
File file = new File("com.shujia.wyh.day27.FileDemo6");
//public String getAbsolutePath()
//获取绝对路径
System.out.println(file.getAbsolutePath());
//public String getPath()
//获取路径:创建File对象时输入的路径
System.out.println(file.getPath());
//public String getName()
//获取名称
//com.shujia.wyh.day27.FileDemo6
System.out.println(file.getName());
//public long length()
//获取文件的字节大小
File file1 = new File("E:\\数加科技\\十四期\\冯提莫.jpg");
System.out.println(file1.length());
//public long lastModified()
//获取文件的最后一次修改的时间
//返回的是时间戳,精确到了毫秒
File file2 = new File("E:\\数加科技\\十四期\\a.txt");
//1640395546537--改之前的
System.out.println(file2.lastModified());
//1640397590639--改之后的
//时间戳与日期的转换
//Date类中有个有参构造方法
//public Date(long date)
Date date = new Date(file2.lastModified());//将获取到的时间戳传进去
//调用有参构造方法,创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(date);
System.out.println(s);
}
}
File类的高级获取功能
import java.io.File;
/*
高级获取功能
public String[] list()
获取指定目录下的所有文件或者文件夹的名称,组成一个数组
public File[] listFiles()
获取指定目录下的所有文件或者文件夹组成的File数组
*/
public class FileDemo7 {
public static void main(String[] args) {
//创建File对象
File file = new File("E:\\数加科技\\十四期");
//public String[] list()
//获取指定目录下的所有文件或者文件夹的名称,组成一个数组
String[] list = file.list();
for(String s : list){
System.out.println(s);
}
System.out.println("================================");
//public File[] listFiles()
//获取指定目录下的所有文件或者文件夹组成的File数组
File[] files = file.listFiles();
for(File f : files){
System.out.println(f.getName());
}
}
}
File类的高级获取功能练习
import java.io.File;
import java.util.ArrayList;
/*
练习:判断E:\数加科技\十四期下面有没有后缀名为.jpg的文件,如果有,就输出此文件的名称
1、将E:\数加科技\十四期封装成一个File对象
2、获取该目录下所有的文件和文件夹组成File数组
3、遍历数组,得到每一个File对象,判断是否是文件
4、判断是否是文件
是:继续判断是否以.jpg后缀的
是:就输出此文件的名称
不是:跳过
不是:跳过
*/
public class FileDemo8 {
public static void main(String[] args) {
//将E:\数加科技\十四期封装成一个File对象
File file = new File("E:\\数加科技\\十四期");
//获取该目录下所有的文件和文件夹组成File数组
File[] files = file.listFiles();
//定义一个变量统计一共有多少.jpg后缀的文件
int count = 0;
//创建一个集合对象,用来添加.jpg后缀的文件名
ArrayList<String> strings = new ArrayList<>();
//遍历数组,得到每一个File对象,判断是否是文件
for(File f : files){
//判断是否是文件
if(f.isFile()){
//继续判断是否以.jpg后缀的
if(f.getName().endsWith(".jpg")){
//是就就将文件名添加到集合中
strings.add(f.getName());
count++;
}
}
}
System.out.println(file.getName()+"目录下共有"+count+"个以.jpg后缀的文件");
if(count>0){
System.out.println("它们分别是:");
for (String s : strings){
System.out.println(s);
}
}
}
}
文件名称过滤器
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/*
文件名称过滤器的实现思想及代码
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
在获取文件的同时,结果就已经满足了我们要查找的条件
上一道练习:
判断E:\数加科技\十四期下面有没有后缀名为.jpg的文件,如果有,就输出此文件的名称
1、我们之前是先获取该目录下所有的文件和文件夹,然后一个一个遍历判断
2、而文件名称过滤器是直接在获取的时候,返回的结果就是满足条件的
*/
public class FileDemo9 {
public static void main(String[] args) {
File file = new File("E:\\数加科技\\十四期");
//使用匿名内部类的形式传参
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//什么都没有输出
// return false;
//该目录下的文件全都输出了
// return true;
//通过测试发现,该目录下的文件或者文件夹到底该不该加入到数组中
//取决于这里的返回值是true还是false
//通过源码发现
//dir:父级目录
//name:目录下文件的名称
File file1 = new File(dir, name);
//判断是否是一个文件
boolean b1 = file1.isFile();
//判断是否以 .jpg 为后缀
boolean b2 = file1.getName().endsWith(".jpg");
//两者同时满足有一个是false都不行
return b1 && b2;
}
});
if(files!=null){
for(File f : files){
System.out.println(f);
}
}
}
}