Java里面的File

Java里面的File

  • File对象表示路径

  • 这个路径可以是存在的,也可以是不存在的

在Java中,File是一个类,它位于java.io包中,用于文件和文件目录路径名的抽象表示形式。File类本身并不涉及文件的读取和写入,它主要用于操作文件或目录的路径名,例如创建、删除、检查文件或目录是否存在等。

用途

  • 文件或目录的创建:使用createNewFile()方法创建文件,使用mkdirs()方法创建目录。
  • 检查文件或目录是否存在:使用exists()方法。
  • 获取文件或目录的属性:如名称、大小、最后修改时间等。
  • 删除文件或目录:使用delete()方法。
  • 列出目录中的文件:使用listFiles()方法。

如何使用

下面是一个简单的例子,演示了如何使用File类来创建文件、检查文件是否存在以及删除文件:

import java.io.File;
import java.io.IOException;

public class FileExample {
    public static void main(String[] args) {
        // 创建一个File对象,表示一个文件路径
        File file = new File("test.txt");

        // 检查文件是否存在
        if (!file.exists()) {
            // 如果文件不存在,则创建它
            try {
                file.createNewFile();
                System.out.println("文件已创建!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("文件已存在!");
        }

        // 删除文件
        if (file.delete()) {
            System.out.println("文件已删除!");
        } else {
            System.out.println("文件删除失败!");
        }
    }
}

注意事项

  1. 文件路径:在使用File类时,需要注意文件路径的正确性。如果路径不正确或文件不存在,可能会导致操作失败。
  2. 异常处理:当进行文件操作时,如创建文件或删除文件,可能会抛出IOException。因此,需要进行异常处理,确保程序的健壮性。
  3. 文件权限:在某些操作系统中,文件的创建、删除和读写等操作可能受到文件权限的限制。因此,需要确保程序有足够的权限来执行这些操作。
  4. 线程安全File类的实例不是线程安全的。如果在多线程环境中使用同一个File实例进行文件操作,可能会导致不可预期的结果。
  5. 资源释放:虽然File类本身不涉及文件的读取和写入,但如果你在使用FileInputStreamFileOutputStreamFileReaderFileWriter等类进行文件操作时,需要注意及时关闭这些资源,以避免资源泄漏。

遍历并获取

package com.mohuanan.file;

import java.io.File;

public class Demo03 {
    public static void main(String[] args) {
        //创建File对象
        File f1 = new File("D:\\testfile");
        //遍历f1
        File[] files = f1.listFiles();
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i]);

        }
        System.out.println(files.length);
    }
}

常见的方法

在Java中,File类提供了许多常见的方法来操作文件和目录。以下是一些常见的File类方法:

  1. 构造方法
  • File(String pathname): 根据给定的路径名字符串创建一个新的File实例。
  • File(String parent, String child): 根据父路径名字符串和子路径名字符串创建一个新的File实例。
  • File(File parent, String child): 根据父File实例和子路径名字符串创建一个新的File实例。
  1. 判断文件或目录是否存在
  • boolean exists(): 检查此抽象路径名表示的文件或目录是否存在。
  1. 判断是否为文件或目录
  • boolean isFile(): 测试此抽象路径名是否表示一个已存在的普通文件。
  • boolean isDirectory(): 测试此抽象路径名是否表示一个目录(也可能是空的)。
  1. 获取文件或目录的信息
  • String getName(): 返回由此抽象路径名表示的文件或目录的名称。
  • String getAbsolutePath(): 返回此抽象路径名的绝对路径名字符串。
  • File getParentFile(): 返回此抽象路径名父目录的抽象路径名。如果此路径名没有指定父目录,则返回null
  1. 文件或目录的创建
  • boolean createNewFile(): 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • boolean mkdir(): 创建一个新的目录。
  • boolean mkdirs(): 创建此抽象路径名指定的目录,包括任何必需但不存在的父目录。
  1. 文件或目录的删除
  • boolean delete(): 删除此抽象路径名表示的文件或目录。
  • void deleteOnExit(): 请求在虚拟机终止时删除此抽象路径名表示的文件或目录。
  1. 重命名文件或目录
  • boolean renameTo(File dest): 将此抽象路径名重命名为给定的目标抽象路径名。
  1. 检查是否为隐藏文件或目录
  • boolean isHidden(): 测试此抽象路径名指定的文件是否是一个隐藏的文件。
  1. 检查是否为绝对路径
  • boolean isAbsolute(): 测试此抽象路径名是否为绝对路径名。

这只是File类提供的一些常见方法,实际上还有其他一些方法,但上述方法通常是在日常编程中最常用的。需要注意的是,File类主要用于文件和目录的路径名管理,而不涉及文件内容的读写操作。如果要读写文件内容,需要使用其他类,如FileReaderFileWriterBufferedReaderBufferedWriter等。

综合案例

遍历电脑的所有文件

package com.mohuanan.fileexercise;

import java.io.File;

public class Demo03 {
    public static void main(String[] args) {

        findAllPan();

    }

    //找到所有的盘符
    public static void findAllPan(){
        //使用静态方法
        File[] files = File.listRoots();
        //遍历数组
        for (int i = 0; i < files.length; i++) {
            //调用findAvi方法
            findAvi(files[i]);
        }
    }


    //找盘符下的所有文件
    public static void findAvi(File file) {
        //1. 进入文件
        File[] files = file.listFiles();
        //4. 判断 因为有的文件是有权限限制的  当文件有权限限制的时候 就返回null
        if (files != null) {
            //2. 遍历数组
            for (File f : files) {
                //3. 判断
                if (f.isFile()) {
                    String name = f.getName();
                    if (name.endsWith(".md")) {
                        System.out.println(f);
                    }
                } else {
                    findAvi(f);
                }

            }
        }

    }
}

删除指定路径所有的文件和文件夹

package com.mohuanan.fileexercise;

import java.io.File;

public class Demo04 {
    public static void main(String[] args) {
        //创建File对象
        File f = new File("D:\\aaa");
        //记得要去调用方法
        deleteFiles(f);

    }

    /*
     * 作用:删除指定路径所有的文件和文件夹
     * */
    public static void deleteFiles(File file) {
        //1. 进入文件
        File[] files = file.listFiles();
        //因为有些是有权限的
        if (files != null) {
            //2. 遍历数组
            for (File f : files) {
                //3. 判断
                if (f.isFile()) {
                    f.delete();
                } else if (f.isDirectory()) {
                    //递归
                    deleteFiles(f);

                }
            }
            //删除自己
            file.delete();
        }

    }
}

统计文件的大小

package com.mohuanan.fileexercise;

import java.io.File;

public class Demo05 {
    public static void main(String[] args) {
        //创建File对象
        File f = new File("D:\\marktext的文档");
        long big = getBig(f);
        System.out.println("文件的大小为: "+ big/1024/1024);
    }

    /*
    * 参数一 :表示文件的路径
    * 返回值: 该文件夹里面所有的文件的大小
    * 作用: 统计该路径下的所有文件的大小 (字节数)
    *
    * */
    public static long getBig(File file){
        //统计文件的大小
        long len = 0;
        //1. 进入文件
        File[] files = file.listFiles();
        //2. 遍历数组
        for (File f : files) {
            //3. 判断
            if(f.isFile()){
                //如果是文件
                //累加
                len = len + f.length();
            }else{
                //递归
                //累加
                len = len + getBig(f);
            }
        }
        return len;
    }

}

统计文件的个数

package com.mohuanan.fileexercise;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo06 {
    public static void main(String[] args) {
        //创建File对象
        File f = new File("D:\\marktext的文档");
        HashMap<String, Integer> count = getCount(f);
        Set<Map.Entry<String, Integer>> entries = count.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println(entry);
        }
    }

    /*
     * 参数表示: 文件的路径
     * 返回值: 该子文件的文件的个数
     * 作用: 统计文件夹的所有的文件的个数,包括子文件夹
     * */
    public static HashMap<String, Integer> getCount(File file) {
        HashMap<String, Integer> hm = new HashMap<>();
        //1. 进入文件
        File[] files = file.listFiles();
        //2. 遍历数组
        for (File f : files) {
            //3. 判断是否是文件
            if (f.isFile()) {
                String[] split = f.getName().split("\\.");
                //获取文件后缀
                String name = split[split.length - 1];
                //是否已经在集合里面
                if (hm.containsKey(name)) {
                    //在集合里面 次数累加
                    int count = hm.get(name);
                    count++;
                    hm.put(name, count);
                } else {
                    //不在集合里面
                    hm.put(name, 1);
                }

            } else {
                //是文件夹 递归
                HashMap<String, Integer> tempHm = getCount(f);
                //将返回值tempHm 累加到hm里
                //遍历tempHm集合
                Set<Map.Entry<String, Integer>> entries = tempHm.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    int value = entry.getValue();
                    if (hm.containsKey(key)) {
                        //和hm集合里面的键重复 累加
                        int t = hm.get(key);
                        int total = value + t;
                        hm.put(key, total);
                    } else {
                        //首次
                        hm.put(key, value);
                    }
                }
            }
        }

        return hm;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/592968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础指令001

名称日期版本说明作者了解并熟练运用Linux基础指令2024/05/04v0.0.1汇总篇lgb 一&#xff0c;了解Linux,并安装 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协…

编译 x264 for iOS

文章目录 编译在 FFMpeg 启用 x264其他编译选项报错处理 环境 &#xff1a; macOS 14.3.1 x264 - 20191217-2245 编译 1、下载 x264 源码 http://download.videolan.org/pub/videolan/x264/snapshots/ 这里我下载x264-snapshot-20191217-2245.tar.bz2 &#xff08;截止2024-…

【计算机网络】计算机网络的定义和分类

一.定义 计算机网络并没有一个精确和统一的定义&#xff0c;在计算机网络发展的不同阶段&#xff0c;人们对计算机网络给出了不同的定义&#xff0c;这些定义反映了当时计算机网络技术的发展水平。 例如计算机网络早期的一个最简单定义&#xff1a;计算机网络是一些互连的、自…

10个使用NumPy就可以进行的图像处理步骤

图像处理是一种数学计算。数字图像由称为像素的彩色小点组成。每个像素由红、绿、蓝(RGB)三个独立的颜色组成。每个像素中的主色由每个RGB分量的数值决定。 本文将介绍10个使用使用NumPy就可以进行的图像处理步骤&#xff0c;虽然有更强大的图像处理库&#xff0c;但是这些简单…

dp 动态规划 力扣

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…

IDA使用教程-IDA7.5版本

IDA使用教程 右键使用32bit分析程序 一&#xff0c;IDA修改&#xff0c;保存 修改&#xff1a;IDA->edit->Patch program&#xff08;补丁程序&#xff09;->Assemble&#xff08;汇编&#xff09;修改。 保存&#xff1a; IDA->edit->Patch program->Appl…

【数据结构】--- 深入剖析二叉树(上篇)--- 初识树和二叉树

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 数据结构之旅 &#x1f3e0; 初识树 &#x1f4d2; 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点…

Leetcode354. 俄罗斯套娃信封问题

Every day a Leetcode 题目来源&#xff1a;354. 俄罗斯套娃信封问题 解法1&#xff1a;动态规划 我们必须要保证对于每一种 w 值&#xff0c;我们最多只能选择 1 个信封。 首先我们将所有的信封按照 w 值第一关键字升序、h 值第二关键字降序进行排序&#xff1b; 随后我们…

QT+串口调试助手+扩展版

前言&#xff1a;此文章是这篇文章的拓展 QT串口调试助手基本版-CSDN博客&#xff0c;如果需要独立完成串口调试助手直接看基本版文章即可&#xff0c;如果需要完成串口调试助手的其他功能&#xff0c;参考拓展版。 一、更新QT串口调试助手UI界面 1、ui串口设置界面 2、ui串口…

Java与Go: 生产者消费者模型

什么是生产者消费者模型 生产者-消费者模型&#xff08;也称为生产者-消费者问题&#xff09;是一种常见的并发编程模型&#xff0c;用于处理多线程或多进程之间的协同工作。该模型涉及两个主要角色&#xff1a;生产者和消费者&#xff0c;一个次要角色&#xff1a;缓冲区。 生…

Unity---版本控制软件

13.3 版本控制——Git-1_哔哩哔哩_bilibili Git用的比较多 Git 常用Linux命令 pwd&#xff1a;显示当前所在路径 ls&#xff1a;显示当前路径下的所有文件 tab键自动补全 cd&#xff1a;切换路径 mkdir&#xff1a;在当前路径下创建一个文件夹 clear&#xff1a;清屏 vim…

EtherCAT通信总线状态监视

1、EtherCAT总线运动控制学习笔记 EtherCAT总线运动控制学习笔记(RXXW_Dor)_汇川pdo控制命令607a-CSDN博客文章浏览阅读3.3k次,点赞3次,收藏9次。说到总线控制,就要说到报文、对象字典、PN通信我们大部分会说报文,EtherCAT通信我们常说对象字典,叫法不一样,但是原理基…

OneFlow深度学习框原理、用法、案例和注意事项

本文将基于OneFlow深度学习框架&#xff0c;详细介绍其原理、用法、案例和注意事项。OneFlow是由中科院计算所自动化研究所推出的深度学习框架&#xff0c;专注于高效、易用和扩展性强。它提供了一种类似于深度学习库的接口&#xff0c;可以用于构建神经网络模型&#xff0c;并…

数据结构---单链表

题目&#xff1a;构造一个单链表。 使用的软件&#xff1a;VS2022使用的语言&#xff1a;C语言使用的项目&#xff1a;test.c Setlist.h Setlish.c 项目实践&#xff1a; Setlist.h的代码为&#xff1a; #pragma once#include<stdio.h> #include<stdlib.h> #incl…

SQL注入基础-3

一、宽字节注入 1、宽字节&#xff1a;字符大小为两个及以上的字节&#xff0c;如GBK&#xff0c;GB2312编码 2、数据库使用GBK编码时&#xff0c;会将两个字符合并为一个汉字(宽字节)。特殊值字符如单引号都会被转义【--->\】&#xff0c;如sqli-lads第32关&#xff0c;输…

【C++】学习笔记——vector_2

文章目录 七、vector2. vecotr的使用3. vector的模拟实现 未完待续 七、vector 2. vecotr的使用 上节我们以二维数组结束&#xff0c;这一节我们以二维数组开始。 // 二维数组 vector<vector<int>> vv;二维数组在底层是连续的一维数组。vv[i][j] 是怎样访问的&a…

Sarcasm detection论文解析 |使用基于多头注意力的双向 LSTM 进行讽刺检测

论文地址 论文地址&#xff1a;https://ieeexplore.ieee.org/document/8949523 论文首页 笔记框架 使用基于多头注意力的双向 LSTM 进行讽刺检测 &#x1f4c5;出版年份:2020 &#x1f4d6;出版期刊:IEEE Access &#x1f4c8;影响因子:3.9 &#x1f9d1;文章作者:Kumar Avinas…

第11章 软件工程

这里写目录标题 1.软件过程1.1能力成熟度模型(CMM)1.2能力成熟度模型集成(CMMI)1.3瀑布模型(线性顺序)1.4增量模型1.5演化模型1.5.1原型模型1.5.2螺旋模型 1.6喷泉模型1.7统一过程(UP)模型 2.敏捷方法3.系统设计4.系统测试4.1单元测试(模块测试)4.2集成测试4.3黑盒测试(功能测试…

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息&#xff08;Message&#xff09;1.2 主题&#xff08;Topic&#xff09;1.3 标签&#xff08;Tag&#xff09;1.4 队列&#xff0…
最新文章