Java学习路程之file类

本文详细介绍了Java中的File类及其基本使用方法,包括路径分类、构造方法、判断路径属性、创建与删除文件及文件夹、遍历文件夹下所有文件等。同时,还探讨了文件过滤器的应用,包括FileFilter接口和FilenameFilter接口的实现,以筛选特定类型的文件或文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

file类
1.file 是文件和目录路径名的抽象表示形式.可以表示文件名、文件夹、文件路径(可以是错误路径)。
2.路径分类
相对路径:这个文件所在的路径与其它文件路径之间的关系。
绝对路径:文件在硬盘上的真实位置

public class Day18 {
    public static void main(String[] args) {
        //分隔符
        String separator = File.separator;
        System.out.println(separator);//  /
        String pathseparator = File.pathSeparator;
        System.out.println(pathseparator);// :

        //File类构造方法
        File file = new File("src/hello.txt");//相对路径
        //判断该路径是否存在
        boolean b = file.exists();
        System.out.println(b);//true
        //获取绝对路径的方法
        String absolutePath = file.getAbsolutePath();
        System.out.println(absolutePath);///Users/lanou/Documents/SHJ180804/blog/src/hello.txt
        //获取传入的路径
        String path = file.getPath();
        System.out.println(path);//src/hello.txt
        //获取文件夹大小(字节)
        long length = file.length();
        //判断一个路径是不是文件
        boolean b2 = file.isFile();
        System.out.println(b2);//true
        //判断一个路径是文件夹
        boolean b3 = file.isDirectory();
        System.out.println(b3);//false
    }
}
//创建方法
public static void main(String[] args) throws IOException {
        //创建方法
        //创建单个文件方法,在路径的文件夹后写明要创建的文件夹
        //传入的路径可能是错误的所以要抛出异常
        File file = new File("/Users/lanou/Desktop/test/hello.txt");
        boolean createNewFile = file.createNewFile();
        System.out.println(createNewFile);//true
        //创建单个文件夹方法
        File file1 = new File("/Users/lanou/Desktop/test/h");
        boolean mkdir = file1.mkdir();
        System.out.println(mkdir);//true
        //创建多层级文件夹方法(也可创建单层级文件夹)
        File file2 = new File("/Users/lanou/Desktop/test/h");
        boolean mkdirs = file1.mkdirs();
        System.out.println(mkdirs);//true
    }
    //删除方法
    public static void main(String[] args) throws IOException {
        //删除方法(可以删除文件和空的文件夹)
        File file = new File("/Users/lanou/Desktop/test/hello.txt");
        boolean delete = file.delete();
        //删除了hello.txt文件
        System.out.println(delete);//true
    }
    public static void main(String[] args) throws IOException {
        //list()获取文件夹下所有文件(一级目录)
        File file = new File("/Users/lanou/Desktop/test");
        //获取最后一个文件或文件夹名
        String name = file.getName();
        String[] strings = file.list();
        //listFiles()以文件类型返回的
        File[] files = file.listFiles();
        for (File file2 : files) {
            System.out.println(file2);
        }
    }

练习1:
封装一个方法 传入一个文件夹路径,打印该文件夹下 所有文件

public void printFiles(File file) {
        File[] listFiles = file.listFiles();
        for (File subFile : listFiles) {
            //判断是不是文件
            if (subFile.isFile()) {
                //是文件直接打印
                System.out.println(file);
            }else {
                //不是文件继续遍历
                printFiles(subFile);
            }
        }
    }

练习2:
//分装方法通过文件夹路径删除文件夹

public void deleteDir(File file) {
        File[] listFiles = file.listFiles();
        for (File subFile : listFiles) {
            if (subFile.isFile()) {
                //是文件直接删除
                subFile.delete();
            }else {
                //不是文件继续遍历
                deleteDir(subFile);
            }
        }
        //删除空文件夹
        file.delete();
    }

练习3:
从控制台输入一个字符串
1.判断该字符串是文件夹路径,返回文件夹路径
2.计算这个文件夹的大小

//判断该字符串是文件夹路径 
public File isFilePath() {
         System.out.println("请输入字符串路径");
         Scanner scanner = new Scanner(System.in);
         while (true) {
             String string = scanner.nextLine();
             //创建文件对象
             File file = new File(string);
             if (file.exists()) {
                 //存在此路径
                if (file.isDirectory()) {
                    //是文件夹
                    return file;
                }else {
                    //不是文件夹
                    System.out.println("不是文件夹,请重试");
                }
            }else {
                //不存在此路径
                System.out.println("不存在此路径,请重试");
            }
        }
     }
    //接收路径计算文件夹大小
     public long getDirLength(File file) {
         long num = 0; //保存文件大小
         File[] listFiles = file.listFiles();
         for (File subFile : listFiles) {
            if (subFile.isDirectory()) {
                //是文件夹,遍历计算文件大小
                num = num + getDirLength(subFile);
            }else {
                //是文件计算大小
                num = num + subFile.length();
            }
        }
         return num;
     }

练习4:
输入一个文件夹路径 按层级关系 打印

public void printDirByLevel(File file, int level) {
        String string  = "";
        for (int i = 0; i < level; i++) {
            string = string + "\t";
        }
        File[] listFiles = file.listFiles();
        for (File subFile : listFiles) {
            //直接打印
            System.out.println(string + subFile);
            if (subFile.isDirectory()) {
                //是文件夹
                printDirByLevel(subFile, level + 1);
            }else {
                //是文件
                System.out.println(string + subFile.getName());
            }
        }
    }

练习5:
传入一个文件夹路径 用map记录类型出现的次数

public void getTypeNum(File file, HashMap<String, Integer> map) {
        File[] listFiles = file.listFiles();
        for (File subFile : listFiles) {
            if (subFile.isFile()) {
                //是文件
                //获取文件名
                String name = subFile.getName();
                //切割文件名
                String[] split = name.split("\\.");
                String key = split[1];
                if (map.containsKey(key)) {
                    //map中不存在key值
                    Integer value = map.get(key);
                    value++;
                    map.put(key, value);
                }else {
                    //map中存在key值
                    map.put(key, 1);
                }
            }else {
                //是文件夹
                getTypeNum(subFile, map);
            }
        }
    }

3.文件过滤器
1).FileFilter 接口

public class Day18 {
    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/test");
        File[] listFiles = file.listFiles(new MyFileFilter());
        for (File subFile : listFiles) {
            System.out.println(subFile);
        }
    }
}

//实现接口的过滤方法
class MyFileFilter implements FileFilter{
      返回false 数组中没有数据
      返回true 打印数组中的一级目录文件和文件夹(与不传参数一样)
      根据接口中这个方法的返回值:
      true 就会把该文件存入到listFiles这个数组中
      false 不会存入到listFiles数组中
     综上listFiles数组中保存什么完全根据这个方法的返回值来看
     参数pathname 一级目录下所有文件
    public boolean accept(File pathname) {
        //通过判断是否是文件和文件夹来过滤打印文件还是文件夹
        return pathname.isDirectory();
    }
}

2).FilenameFilter(接口) 过滤器

public class Day18 {
    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/test");
        File[] listFiles = file.listFiles(new MyFileNameFilter());
        System.out.println(listFiles);
    }
}
//创建MyFileNameFilter类实现FilenameFilter接口
class MyFileNameFilter implements FilenameFilter{ 
    @Override
    public boolean accept(File dir, String name) {
        //dir为文件的目录路径,name为文件的文件名
        System.out.println(dir + "  " + name);
        return false;
    }
}
内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值