鱼C论坛

 找回密码
 立即注册
查看: 2707|回复: 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对象
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());
        }
}

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-11 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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