moc 发表于 2018-12-27 18:32:14

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]
查看完整版本: Java-025文件与目录管理