Java学习之File类

File类

1. 文件路径

java 复制代码
import java.io.File;

public class DemoFile1 {
    
    public static void main(String[] args) {
        // 选择路径时,从当前磁盘的根路径开始
        String path = "D:\\workspace\\java\\data\\students.txt";
        File file = new File(path);
        System.out.println(file.exists());  // true  当前路径被读取到了...

        /*
            TODO 为了解决代码的移植问题 需要使用相对路径
                相对路径是从当前项目的根路径开始的
         */

//        String path2 = ".\\data\\students.txt";
//        String path2 = "data\\students.txt";
//        String path2 = "data\students.txt"; // 错误,单个的\表示有转义 具有特殊含义 \\ 可以消除其转义表示一个 \
        String path2 = "data/students.txt";  // 上述斜杠编写麻烦于是添加了 反斜杠
        File file2 = new File(path2);
        System.out.println(file2.exists()); // true


        String path3 = "data";
        String fileName ="students.txt";
        File file3 = new File(path3, fileName);
        System.out.println(file3.exists());

    }
}

2. 文件、目录的创建、删除和重命名

java 复制代码
import java.io.File;
import java.io.IOException;

public class DemoFile2 {
    
    public static void main(String[] args){
        /*
        创建功能
            public boolean createNewFile() 创建文件
            public boolean mkdir()  创建目录
            public boolean mkdirs()  创建多级目录
        删除功能
            public boolean delete() 删除路径中最后一层的目录或文件
        重命名功能
            public boolean renameTo(File dest)
         */
        
        String filePath = "data/data.txt";
        File file = new File(filePath);
        if (!file.exists()) {
            try {
                // 创建文件
                file.createNewFile();  // 直接调用会报错,错误的指示是在方法名之上
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        String dirPath = "data/dir";
        File file1 = new File(dirPath);
//        file1.createNewFile();
        file1.mkdir();  // 创建目录时,要保证当前目录下没有同名的文件或目录

        String dirPath2 = "data/dir1/next_dir";
        File file2 = new File(dirPath2);
//        file2.mkdir(); // 没有生效,next_dir目录必须要现有 dir1目录

        file2.mkdirs();
        file2.delete();

        //注:传入的是一个指明了路径的匿名File对象
        file1.renameTo(new File("data/dir2"));




    }
}

3. File类方法

java 复制代码
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class DemoFile3 {

    public static void main(String[] args) {
        /*
            判断功能
                public boolean isDirectory()
                public boolean isFile()
                public boolean exists()
                public boolean canRead()
                public boolean canWrite()
                public boolean isHidden()
         */

        File dirFile = new File("data/dir1");
        System.out.println(dirFile.isDirectory()); // true

        File dataFile = new File("data/data.txt");
        System.out.println(dataFile.isFile());

        System.out.println(dataFile.canRead()); //
        System.out.println(dataFile.canWrite());
        // 对于Linux平台 隐藏文件表示为 .文件名
        System.out.println(new File("data/.file").isHidden()); // true


        /*
            基本获取功能
                public String getAbsolutePath()
                public String getPath()
                public String getName()
                public long length()
                public long lastModified()
         */

        System.out.println(dataFile.getAbsoluteFile()); // 全路径
        System.out.println(dataFile.getPath()); // 相对路径
        System.out.println(dataFile.getName()); // 文件名
        System.out.println(dataFile.length()); // 文件长度
        System.out.println(dataFile.lastModified()); // 最后一次修改时间  => 1714381721534 毫秒

        // 格式化展示 yyyy-MM-dd HH:mm:ss
        Date date = new Date(dataFile.lastModified());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));



        /*
            高级获取功能
                public String[] list()
                public File[] listFiles()
         */

        File data = new File("data");
        //File.list()返回的是当前文件目录下所有文件和目录的文件名,返回的是String数组
        String[] list = data.list();
        System.out.println(Arrays.toString(list)); // [.file, data.txt, dir1, dir2, score.txt, students.txt]

        // 数组 File
        //data.listFiles():得到的是一个 File 类型的数组,返回的是"data"目录中的文件和目录
        File[] files = data.listFiles();
        for (File file : files) {
            System.out.println(file.getAbsoluteFile());
        }

        System.out.println("----------------");
        File[] files2 = data.listFiles();
        for (File file : files2) {
            String path = file.getAbsolutePath();
            //endsWith():用于测试字符串是否以指定的后缀结束。
            if (path.endsWith(".jpg")) {
                System.out.println(path);
            }
        }
    }
}

4. File类中list()方法

java 复制代码
package com.shujia.day11_SQL_Exception_File;

import java.io.File;
import java.io.FilenameFilter;

public class Demo11File {
    public static void main(String[] args) {
        File data = new File("data");
        /*
            TODO 源码:
                public String[] list(FilenameFilter filter) {
                    String names[] = list();
                    // 如果当前 names是空 或者过滤器没有定义 则返回空的
                    if ((names == null) || (filter == null)) {
                        return names;
                    }
                    // 创建新的ArrayList
                    List<String> v = new ArrayList<>();
                      // 遍历所有的data中的文件及目录的名称
                    for (int i = 0 ; i < names.length ; i++) {
                      // 调用自定义过滤器中的accept方法 将当前的 data对象传入第一个参数 names[i] 表示每一个文件名
                        if (filter.accept(this, names[i])) {
                        // 如果判断结果为true 将当前文件名添加到 ArrayList 中
                            v.add(names[i]);
                        }
                    }
                    // 将ArrayList转成数组
                    return v.toArray(new String[v.size()]);
                }
         */

        String[] list = data.list(
                new FilenameFilter() {
                    // accept 表示接收一个元素的数据 类型为 File
                    @Override
                    public boolean accept(File dir, String name) {
                        return name.endsWith(".jpg");
                    }
                }
        );

        for (String s : list) {
            System.out.println(s);
        }

    }
}
相关推荐
所待.3832 分钟前
JavaEE之线程初阶(上)
java·java-ee
Winston Wood6 分钟前
Java线程池详解
java·线程池·多线程·性能
Chef_Chen9 分钟前
从0开始学习机器学习--Day33--机器学习阶段总结
人工智能·学习·机器学习
手握风云-10 分钟前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
喵叔哟30 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生36 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow1 小时前
学习路之压力测试--jmeter安装教程
学习·jmeter·压力测试
hopetomorrow1 小时前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
不是二师兄的八戒1 小时前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
爱编程的小生1 小时前
Easyexcel(2-文件读取)
java·excel