Java-025文件与目录管理
本帖最后由 moc 于 2019-1-6 22:53 编辑1、简介
目录是管理文件的特殊机制,同类文件保存在同一个目录下不仅可以简化文件管理,而且还可以提高工作效率。
Java 语言在 java.io 包中定义了一个 File 类专门用来管理磁盘文件和目录。
每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息。
通过调用 File 类提供的各种方法,能够创建、删除、重名名文件、判断文件的读写权限以及是否存在,设置和查询文件的最近修改时间等。不同操作系统具有不同的文件系统组织方式,通过使用 File 类对象,Java 程序可以用与平台无关的、统一的方式来处理文件和目录。
2、File类
1. 构造方法
File(String pathname)-------------------->根据一个路径得到File对象
File(String parent, String child)--------->根据一个目录和一个子文件/目录得到File对象
File(File parent, String child)------------>根据一个父File对象和一个子文件/目录得到File对象
public static void main(String[] args) {
// File(String pathname):根据一个路径得到File对象
// 把e:\\demo\\a.txt封装成一个File对象
File file = new File("E:\\demo\\a.txt");
// File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File file2 = new File("E:\\demo", "a.txt");
// File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File file3 = new File("e:\\demo");
File file4 = new File(file3, "a.txt");
}2. 创建功能
public boolean createNewFile()-------------->创建文件 如果存在这样的文件,就不创建了
public boolean mkdir()------------------------>创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs()----------------------->创建文件夹,如果父文件夹不存在,会帮你创建出来
public static void main(String[] args) throws IOException {
// 需求:我要在e盘目录下创建一个文件夹demo
File file = new File("e:\\demo");
System.out.println("mkdir:" + file.mkdir());
// 需求:我要在e盘目录demo下创建一个文件a.txt
File file2 = new File("e:\\demo\\a.txt");
System.out.println("createNewFile:" + file2.createNewFile());
// 需求:我要在e盘目录test下创建一个文件b.txt
// Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
// 注意:要想在某个目录下创建内容,该目录首先必须存在。
// File file3 = new File("e:\\test\\b.txt");
// System.out.println("createNewFile:" + file3.createNewFile());
// 创建多级目录
File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd");
System.out.println("mkdirs:" + file7.mkdirs());
// 这里a.txt是个文件夹
File file8 = new File("e:\\liuyi\\a.txt");
System.out.println("mkdirs:" + file8.mkdirs());
}3. 删除功能
public boolean delete()---------------->删除文件或目录,必须是空目录才能删除,删除成功返回真,否则返回假
注意: Java中的删除不走回收站。
// 删除a.txt这个文件
File file3 = new File("a.txt");
System.out.println("delete:" + file3.delete());
// 删除ccc这个文件夹
File file4 = new File("aaa\\bbb\\ccc");
System.out.println("delete:" + file4.delete());4. 重命名功能
public boolean renameTo(File dest) --------------> 如果路径名相同,就是改名; 如果路径名不同,就是改名并剪切。
File file2 = new File("1.jpg");
File newFile2 = new File("e:\\2.jpg");
System.out.println("renameTo:" + file2.renameTo(newFile2));5. 判断功能
public boolean isDirectory() ------------> 判断是否是目录
public boolean isFile()------------------> 判断是否是文件
public boolean exists()-----------------> 判断是否存在
public boolean canRead()-------------> 判断是否可读
public boolean canWrite()------------> 判断是否可写
public boolean isHidden()------------> 判断是否隐藏
public static void main(String[] args) {
// 创建文件对象
File file = new File("123.txt");
System.out.println("isDirectory:" + file.isDirectory());// false
System.out.println("isFile:" + file.isFile());// true
System.out.println("exists:" + file.exists());// true
System.out.println("canRead:" + file.canRead());// true
System.out.println("canWrite:" + file.canWrite());// true
System.out.println("isHidden:" + file.isHidden());// false
}6. 获取功能
public String getAbsolutePath()----------------> 获取绝对路径
public String getPath()--------------------------> 获取相对路径
public String getName()-------------------------> 获取名称
public long length()------------------------------> 获取长度<字节数>
public long lastModified()-----------------------> 获取最后一次的修改时间,毫秒值
public String[] list()------------------------------> 获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles()----------------------------> 获取指定目录下的所有文件或者文件夹的File数组
public static void main(String[] args) {
// 创建文件对象
File file = new File("demo\\test.txt");
System.out.println("getAbsolutePath:" + file.getAbsolutePath());
System.out.println("getPath:" + file.getPath());
System.out.println("getName:" + file.getName());
System.out.println("length:" + file.length());
System.out.println("lastModified:" + file.lastModified());
// 1416471971125
Date d = new Date(1416471971125L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
// 指定一个目录
File file = new File("e:\\");
// public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
String[] strArray = file.list();
for (String s : strArray) {
System.out.println(s);
}
System.out.println("------------");
// public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println(f.getName());
}
}3、接口--文件名称过滤器
包: java.io.FilenameFilter
boolean accept(File dir, String name)----------> 该接口唯一的方法,测试指定文件是否应该包含在某一文件列表中。
案例:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
public static void main(String[] args) {
File file = new File("e:\\");
// 获取该目录下所有文件或者文件夹的String数组
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".jpg");
}
});
// 遍历
for (String s : strArray) {
System.out.println(s);
}
}递归案例:
需求:递归删除带内容的目录
分析:
A:封装目录
B:获取该目录下的所有文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象
D:判断该File对象是否是文件夹
是:回到B
否:就删除
public static void main(String[] args) {
// 封装目录
File srcFolder = new File("demo");
// 递归实现
deleteFolder(srcFolder);
}
private static void deleteFolder(File srcFolder) {
// 获取该目录下的所有文件或者文件夹的File数组
File[] fileArray = srcFolder.listFiles();
if (fileArray != null) {
// 遍历该File数组,得到每一个File对象
for (File file : fileArray) {
// 判断该File对象是否是文件夹
if (file.isDirectory()) {
deleteFolder(file);
} else {
System.out.println(file.getName() + "---" + file.delete());
}
}
System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
}
}
页:
[1]