—— 目录 ——
① 创建文件夹
public static void createFolder(String name)
{
// 文件对象创建
// File 对象可以是文件也可以是文件夹
File folder = new File(name);
// 判断文件夹是否存在,不存在返回false
if(!folder.exists()) // 不存在则创建一个
{
// 使用 mkdir 只能创建一级目录,也就是说该目录的父级目录必须存在
// 这里父级,目录不存在,所以创建失败了
System.out.println(folder.mkdir());
// 使用 mkdirs 即可创建多级目录,即使父级目录不存在也会被一个个创建出来
System.out.println(folder.mkdirs());
}
}
调用:createFolder("D:/test/test_2");
运行结果:false true
② 创建文件
// 创建文件
public static void createFile(String name) throws IOException
{
File file = new File(name);
if(!file.exists())
{
System.out.println(file.createNewFile());
}
}
调用:createFile("D:/test/txt.txt"); 这里直接抛给JVM了
运行结果:true
①② 的效果:
③ 判断文件性质
File folder = new File("D:/test");
File txt = new File("D:/test/txt.txt");
// 判断是否为文件或者文件夹
System.out.println("folder为:文件? " + folder.isFile() + " 文件夹? " + folder.isDirectory());
System.out.println("txt为:文件? " + txt.isFile() + " 文件夹? " + txt.isDirectory());
// 文件是否:存在、可读、可写
System.out.println("txt:存在?" + txt.exists() + " 可读?" + txt.canRead() + " 可写?" + txt.canWrite());
System.out.println("folder:存在?" + folder.exists() + " 可读?" + folder.canRead() + " 可写?" + folder.canWrite());
运行结果:
folder为:文件? false 文件夹? true
txt为:文件? true 文件夹? false
txt:存在?true 可读?true 可写?true
folder:存在?true 可读?true 可写?true
④ 获取文件属性
// 获取文件名
System.out.println(txt.getName());
// 获取文件路径
System.out.println(txt.getPath());
// 获取文件绝对路径
System.out.println(txt.getAbsolutePath());
// 获取上级路径
System.out.println(txt.getParent());
// 返回文件的大小,单位为字节
System.out.println(txt.length());
System.out.println(folder.length());
// 返回最后的修改时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(txt.lastModified()));
运行结果:
txt.txt
D:\test\txt.txt
D:\test\txt.txt
D:\test
0
0
2021-02-17 11:08:18
⑤ 获取文件夹列表
// 获取所有文件的文件名
String[] names = folder.list();
for(String name: names) System.out.println(name);
System.out.println("------");
// 获取所有文件对象
File[] nameFiles = folder.listFiles();
for(File name: nameFiles) System.out.println(name.getName());
⑥ 删除文件
System.out.println(txt.delete());
运行结果:true
⑦ 删除文件夹
这里又把删除的 txt.txt 恢复了,且在 test_2 文件夹中新增文件 txt_2.txt用于测试
删除文件夹比较麻烦,原因是当删除的文件夹中不是空文件夹时,会删除失败
而文件夹中又可能包含文件夹,这就要求必须一层一层深入将每个文件夹都清空,最后才能把目标文件夹删除
这就需要用到递归了
public static void main(String[] args) throws IOException
{
deleteFolder(new File("D:/test"));
File f = new File("D:/test");
System.out.println(f.exists());
}
public static void deleteFolder(File folder)
{
// 将文件夹全部清空
// 如果是文件,则跳到下一步直接删除
if(!folder.isFile())
{
// 是文件夹的话,把文件列表拿出来
File[] files = folder.listFiles();
// 保证文件对象取到了不为空,且文件夹也不为空
if(files!=null && files.length >0)
// 然后遍历删除
for(File file: files) deleteFolder(file); // 直接递归删除
}
// 最后一部把已清空的文件夹删除
folder.delete();
}
运行结果:false
回去看可以发现 test 已经无了~
注意不要把D盘干掉了 O.O ,这个好像是粉碎性删除了,回收站找不到的
⑧ 查找文件(支持模糊查找)
public static void main(String[] args) throws IOException
{
StringBuilder found = seekFiles("D:/test", "test");
System.out.println("找到如下:\n" + found);
}
// 查找文件 (在什么路径找什么名称)
public static StringBuilder seekFiles(String path, String name)
{
StringBuilder found = new StringBuilder(); // 存放符合要求的路径
File folder = new File(path);
File[] files = folder.listFiles();
// 如果文件夹对象不为空且文件夹不为空,则搜索
if(files!=null && files.length>0)
for(File file: files)
{
// 如果 文件/文件夹 名称包含指定名称,则添加到 found 中
if(file.getName().contains(name))
found.append(file.getAbsolutePath()).append("\n");
// 如果还是文件夹,则继续递归查找
if(file.isDirectory())
found.append(findFiles(file.getAbsolutePath(), name));
}
return found;
}
运行结果:
找到如下:
D:\test\mytest
D:\test\ohhhhhhhhh\ohhhtest.txt
D:\test\test1
D:\test\ttt\ttttest
D:\test\ttt\ttttest\test.txt
原来是定期船从空中降落(寒冰小澈)