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);
        }

    }
}
相关推荐
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹3 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭4 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫4 小时前
泛型(2)
java
超爱吃士力架4 小时前
邀请逻辑
java·linux·后端
南宫生4 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石4 小时前
12/21java基础
java
李小白664 小时前
Spring MVC(上)
java·spring·mvc
sanguine__4 小时前
Web APIs学习 (操作DOM BOM)
学习
GoodStudyAndDayDayUp5 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea