File类
File既能表示文件,也能表示文件夹,需要指定一个路径。
File构造方法
构造方法是用来创建对象的,既能创建文件的对象,也能创建文件夹的对象。
public File(String pathname)
通过字符串路径创建File对象
public File(String parent, String child)
通过字符串的父路径和子路径创建File对象
public File(File parent, String child)
通过父路径和子路径常见File对象
演示创建File对象的方式。
//把文件路径,封装为File对象
File f1=new File("C:\\Users\\itheima\\Desktop\\a.txt");
System.out.println(f1);
//根路径父路径和子路径,封装为File对象
File f2=new File("C:\\Users\\itheima\\Desktop","a.txt");
System.out.println(f2);
//创建父路径的对象(文件夹)
File dir =new File("C:\\Users\\itheima\\Desktop");
File f3=new File(dir,"a.txt");
System.out.println(f3);
注意:不管路径是否真实存在,对象都能创建成功。
File类的方法
- 获取方法
public String getName()
获取文件或者文件夹的名称
public String getParent()
获取父路径。返回字符串
public File getParentFile()
获取父路径,返回File对象
public String getPath()
获取File对象封装的路径
public String getAbsolutePath()
获取绝对路径,返回字符串
public File getAbsoluteFile()
获取绝对路径,返回File对象
public long length()
获取文件的长度(单位:字节)
public long lastModified()
获取文件最后一次修改的时间
- 判断方法
public boolean exists()
判断文件、目录是否存在
public boolean isFile()
判断是否为文件
public boolean isDirectory()
判断是否为文件夹
- 创建方法
public boolean createNewFile()
创建文件,创建成功返回true; 创建失败返回false
public boolean mkdir()
创建文件夹(单级文件夹)
public boolean mkdirs()
创建文件夹(多级文件夹)
- 删除文件
public boolean delete()
删除文件或者文件夹(只能删除空的文件夹)
- 重命名
public boolean renameTo(File dest)
重新命名文件的路径
- 文件夹遍历
public File[] listFiles()
获取一个文件夹中所有子文件和子文件夹。
注意:
1.如果文件夹是一个空文件夹,返回的数组长度为0
2.如果调用者不是一个文件夹,会返回null
3.如果文件夹没有权限访问,也会返回null
方法演示
- 构造方法创建对象
//把文件路径,封装为File对象
File f1=new File("C:\\Users\\itheima\\Desktop\\a.txt");
System.out.println(f1);
//根路径父路径和子路径,封装为File对象
File f2=new File("C:\\Users\\itheima\\Desktop","a.txt");
System.out.println(f2);
//创建父路径的对象(文件夹)
File dir =new File("C:\\Users\\itheima\\Desktop");
File f3=new File(dir,"a.txt");
System.out.println(f3);
File f4=new File("F:\\itcast\\a.txt");
System.out.println(f4);
- 获取方法演示
File f=new File("C:\\Users\\itheima\\Desktop\\a.txt");
//获取名称
String name = f.getName();
System.out.println(name);
//获取父路径
String parent = f.getParent();
System.out.println(parent);
File parentFile = f.getParentFile();
System.out.println(parentFile);
//获取File对象封装的路径
String path = f.getPath();
System.out.println(path);
//获取文件占用的字节数(长度)
long length = f.length();
System.out.println(length);
//获取最后一个修改的时间
long lstime = f.lastModified();
//根据指定的毫秒值,创建Date对象
Date date=new Date(lstime);
//格式化时间
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(date);
//打印时间
System.out.println(time);
- 相对路径和绝对路径
绝对路径:从盘符开始的路径
相对路径: 相对于项目的根目录来说的,把项目的根目录省略了。
举例:项目的根目录为:C:\IdeaProjects\javase2.0
绝对路径: C:\IdeaProjects\javase2.0\\itehima\\a.txt
相对路径: itehima\\a.txt
//根据绝对路径,创建File对象
File f1=new File("C:\\IdeaProjects\\javase2.0\\FileDemo\\a.txt");
//获取绝对路径
System.out.println(f1.getAbsolutePath());
System.out.println(f1.length());
//根据相对路径,创建File对象
File f2=new File("FileDemo\\a.txt");
//获取绝对路径
System.out.println(f2.getAbsolutePath());
System.out.println(f2.length());
- 判断功能的演示
File f = new File("FileDemo\\a.txt");
//判断文件是否存在
if(f.exists()){
System.out.println("文件存在");
}else {
System.out.println("文件不存在");
}
//判断是否为文件
if(f.isFile()){
System.out.println("是文件");
}else {
System.out.println("是文件夹");
}
//判断是否为文件夹
if(f.isDirectory()){
System.out.println("是文件夹");
}else {
System.out.println("是文件");
}
- 创建功能的演示
//创建文件夹
File dir =new File("FileDemo\\aaa\\bbb\\ccc\\ddd");
dir.mkdirs();
//创建文件
File f = new File("FileDemo\\aaa\\bbb\\ccc\\ddd\\b.txt");
boolean flag = f.createNewFile();
System.out.println(flag);
- 重命名的演示
File f = new File("FileDemo\\a.txt");
//重命名
f.renameTo(new File("C:\\Users\\itheima\\Desktop\\你好世界.txt"));
File文件夹遍历
- 获取文件夹中,每一种文件出现的次数
//计算一个文件中,每一种文件出现的次数
//HashMap<String,Integer>: 文件后缀名,次数
//File dir: 文件夹
public static void getCount(HashMap<String, Integer> map, File dir) {
//获取文件夹中所有的内容
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile()) {
//获取文件的名称,再获取后缀名
String[] arr = file.getName().split("\\.");
if (arr.length == 2) {
String endName = arr[1];
//判断后缀名在map集合中是否存在
if (map.containsKey(endName)) {
//如果存在,获取值,+1,再存回map集合
Integer count = map.get(endName);
map.put(endName, count + 1);
} else {
//如果不存在,存到map集合中,值是1
map.put(endName, 1);
}
}
} else {
getCount(map, file);
}
}
}
- 删除文件夹
//删除文件夹
public static void deleteDir(File dir) {
//1.获取文件夹中所有的内容
File[] files = dir.listFiles();
//2.遍历数组中
for (File file : files) {
//3.判断file是文件,就直接删除
if (file.isFile()) {
file.delete();
} else { //如果是文件夹,递归调用
deleteDir(file);
}
}
//删除空的文件夹
dir.delete();
}