鱼C论坛

 找回密码
 立即注册
查看: 2891|回复: 0

[学习笔记] Java-025文件与目录管理

[复制链接]
发表于 2018-12-27 18:32:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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对象
  1. public static void main(String[] args) {
  2.         // File(String pathname):根据一个路径得到File对象
  3.         // 把e:\\demo\\a.txt封装成一个File对象
  4.         File file = new File("E:\\demo\\a.txt");

  5.         // File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
  6.         File file2 = new File("E:\\demo", "a.txt");

  7.         // File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
  8.         File file3 = new File("e:\\demo");
  9.         File file4 = new File(file3, "a.txt");
  10. }
复制代码
2. 创建功能
        public boolean createNewFile()  -------------->  创建文件 如果存在这样的文件,就不创建了
        public boolean mkdir()  ------------------------>  创建文件夹 如果存在这样的文件夹,就不创建了
        public boolean mkdirs()  ----------------------->  创建文件夹,如果父文件夹不存在,会帮你创建出来
  1. public static void main(String[] args) throws IOException {
  2.         // 需求:我要在e盘目录下创建一个文件夹demo
  3.         File file = new File("e:\\demo");
  4.         System.out.println("mkdir:" + file.mkdir());

  5.         // 需求:我要在e盘目录demo下创建一个文件a.txt
  6.         File file2 = new File("e:\\demo\\a.txt");
  7.         System.out.println("createNewFile:" + file2.createNewFile());

  8.         // 需求:我要在e盘目录test下创建一个文件b.txt
  9.         // Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
  10.         // 注意:要想在某个目录下创建内容,该目录首先必须存在。
  11.         // File file3 = new File("e:\\test\\b.txt");
  12.         // System.out.println("createNewFile:" + file3.createNewFile());

  13.         // 创建多级目录
  14.         File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd");
  15.         System.out.println("mkdirs:" + file7.mkdirs());

  16.         // 这里a.txt是个文件夹
  17.         File file8 = new File("e:\\liuyi\\a.txt");
  18.         System.out.println("mkdirs:" + file8.mkdirs());
  19. }
复制代码
3. 删除功能
        public boolean delete()  ---------------->  删除文件或目录,必须是空目录才能删除,删除成功返回真,否则返回假
注意: Java中的删除不走回收站。
  1. // 删除a.txt这个文件
  2. File file3 = new File("a.txt");
  3. System.out.println("delete:" + file3.delete());

  4. // 删除ccc这个文件夹
  5. File file4 = new File("aaa\\bbb\\ccc");
  6. System.out.println("delete:" + file4.delete());
复制代码
4. 重命名功能
public boolean renameTo(File dest) --------------> 如果路径名相同,就是改名; 如果路径名不同,就是改名并剪切。
  1. File file2 = new File("1.jpg");
  2. File newFile2 = new File("e:\\2.jpg");
  3. 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()  ------------> 判断是否隐藏
  1. public static void main(String[] args) {
  2.         // 创建文件对象
  3.         File file = new File("123.txt");

  4.         System.out.println("isDirectory:" + file.isDirectory());// false
  5.         System.out.println("isFile:" + file.isFile());// true
  6.         System.out.println("exists:" + file.exists());// true
  7.         System.out.println("canRead:" + file.canRead());// true
  8.         System.out.println("canWrite:" + file.canWrite());// true
  9.         System.out.println("isHidden:" + file.isHidden());// false
  10. }
复制代码
6. 获取功能
        public String getAbsolutePath()  ----------------> 获取绝对路径
        public String getPath()  --------------------------> 获取相对路径
        public String getName()  -------------------------> 获取名称
        public long length()  ------------------------------> 获取长度<字节数>
        public long lastModified()  -----------------------> 获取最后一次的修改时间,毫秒值
        public String[] list()  ------------------------------> 获取指定目录下的所有文件或者文件夹的名称数组
        public File[] listFiles()  ----------------------------> 获取指定目录下的所有文件或者文件夹的File数组
  1. public static void main(String[] args) {
  2.         // 创建文件对象
  3.         File file = new File("demo\\test.txt");

  4.         System.out.println("getAbsolutePath:" + file.getAbsolutePath());
  5.         System.out.println("getPath:" + file.getPath());
  6.         System.out.println("getName:" + file.getName());
  7.         System.out.println("length:" + file.length());
  8.         System.out.println("lastModified:" + file.lastModified());

  9.         // 1416471971125
  10.         Date d = new Date(1416471971125L);
  11.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  12.         String s = sdf.format(d);
  13.         System.out.println(s);

  14.         // 指定一个目录
  15.         File file = new File("e:\");

  16.         // public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
  17.         String[] strArray = file.list();
  18.         for (String s : strArray) {
  19.                 System.out.println(s);
  20.         }
  21.         System.out.println("------------");

  22.         // public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
  23.         File[] fileArray = file.listFiles();
  24.         for (File f : fileArray) {
  25.                 System.out.println(f.getName());
  26.         }
  27. }
复制代码
3、接口--文件名称过滤器
包: java.io.FilenameFilter
boolean accept(File dir, String name)  ----------> 该接口唯一的方法,测试指定文件是否应该包含在某一文件列表中。
案例:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
  1. public static void main(String[] args) {
  2.         File file = new File("e:\");

  3.         // 获取该目录下所有文件或者文件夹的String数组
  4.         String[] strArray = file.list(new FilenameFilter() {
  5.                 @Override
  6.                 public boolean accept(File dir, String name) {
  7.                         return new File(dir, name).isFile() && name.endsWith(".jpg");
  8.                 }
  9.         });

  10.         // 遍历
  11.         for (String s : strArray) {
  12.                 System.out.println(s);
  13.         }
  14. }
复制代码
递归案例:
需求:递归删除带内容的目录
分析:
        A:封装目录
        B:获取该目录下的所有文件或者文件夹的File数组
        C:遍历该File数组,得到每一个File对象
        D:判断该File对象是否是文件夹
                是:回到B
                否:就删除
  1. public static void main(String[] args) {
  2.         // 封装目录
  3.         File srcFolder = new File("demo");
  4.         // 递归实现
  5.         deleteFolder(srcFolder);
  6. }

  7. private static void deleteFolder(File srcFolder) {
  8.         // 获取该目录下的所有文件或者文件夹的File数组
  9.         File[] fileArray = srcFolder.listFiles();

  10.         if (fileArray != null) {
  11.                 // 遍历该File数组,得到每一个File对象
  12.                 for (File file : fileArray) {
  13.                         // 判断该File对象是否是文件夹
  14.                         if (file.isDirectory()) {
  15.                                 deleteFolder(file);
  16.                         } else {
  17.                                 System.out.println(file.getName() + "---" + file.delete());
  18.                         }
  19.                 }
  20.                 System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
  21.         }
  22. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表