Java学习【深入解读File类:从基础到高级的完整指南】

Java学习【深入解读File类:从基础到高级的完整指南】

  • File的概述和构造方法
  • File常见的成员方法
    • 🌙构造方法
    • 🌙length()
    • 🌙getAbsoluteFile()和getPath()
    • 🌙getName()和lastModified()
  • 文件的创建和删除
  • 获取并遍历

在这里插入图片描述
🚀所属专栏:Java学习⭐⭐
🚀欢迎互三👉: 2的n次方_⭐⭐

File的概述和构造方法

File对象表示路径,可以是文件,也可以是文件夹,这个路径可以是存在的,也可以是不存在的
绝对路径:是从文件系统的根目录开始,到指定文件或目录的完整路径,它通常包含盘符
相对路径:是相对于当前工作目录或某个已知目录的路径
在这里插入图片描述
首先第一个,就是传入一个完整的路径创建文件对象
第二个:父级路径就是指包含该文件或目录的上一级目录的路径
字级路径是是某个目录下的文件或子目录
例如:"E:\java\a.txt"中的父级路径就是E:\java,子路径就是后面的a.txt

下面是三种构造方法示例:

public class FileDemo1 {public static void main(String[] args) {//E:\java\a.txtString str = "E:\\java\\a.txt";//根据文件路径创建文件对象File f1 = new File(str);System.out.println(f1);String parent1 = "E:\\java";String child1 = "a.txt";//根据父路径和子路径创建文件对象File f2 = new File(parent1,child1);System.out.println(f2);//把一个File表示的路径和一个String表示的路径进行拼接File parent2 = new File("E:\\java");String child2 = "a.txt";File f3 = new File(parent2,child2);System.out.println(f3);}
}

File常见的成员方法

接下来介绍一下File中常见的成员方法的使用
在这里插入图片描述

🌙构造方法

public class FileDemo2 {public static void main(String[] args) {String str = "E:\\java\\a.txt";File f1 = new File(str);//判断是否是文件夹System.out.println(f1.isDirectory());//false//判断是否是文件System.out.println(f1.isFile());//true//判断是否存在System.out.println(f1.exists());//true}
}

a.txt是一个文本文件,所以在判断是否是文件夹时返回值为false,同理如果传入的路径表示一个文件夹,在判断是否是文件时就会返回false,如果传入的是一个不存在的路径,在判断是否存在时也会返回false

🌙length()

length()方法返回的文件大小为字节

        File f1 = new File("E:\\java\\a.txt");long len = f1.length();System.out.println(len);

这个是a.txt的基本信息
在这里插入图片描述

也正确的打印出了文件的字节大小

在这里插入图片描述
length()方法只能获取文件的大小,如果是一个文件夹的话就会返回0,获取文件夹的大小需要把文件夹里所有的文件大小都加到一起

🌙getAbsoluteFile()和getPath()

getAbsoluteFile():获取绝对路径

 		File f1 = new File("text\\file\\FileDemo3.java");File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");//获取绝对路径System.out.println(f1.getAbsoluteFile());System.out.println(f2.getAbsoluteFile());

不论创建对象时传入的是相对路径还是绝对路径,最后返回的都是绝对路径
在这里插入图片描述

getPath():返回定义文件时所使用的路径

		File f1 = new File("text\\file\\FileDemo3.java");File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");System.out.println(f1.getPath());System.out.println(f2.getPath());

在这里插入图片描述

🌙getName()和lastModified()

getName就是获取名字,如果是文件,会获取完整的文件名,包括后缀名,如果是文件夹,也就会返回完整的文件夹的名字

		File f2 = new File("text\\file\\FileDemo3.java");//获取文件名,(文件名+后缀)System.out.println(f2.getName());File f3 = new File("text\\file");//获取文件夹名String name = f3.getName();System.out.println(name);

在这里插入图片描述

lastModified()返回的是文件最后的修改时间,单位是毫秒,根据Date类,可以转换为想要的格式

//获取文件最后修改时间(毫秒值)long time = f1.lastModified();//将毫秒值转换成日期对象Date date = new Date(time);//将日期对象转换成yyyy-MM-dd HH:mm:ss格式String time1 = date.toLocaleString();System.out.println(time1);

在这里插入图片描述

文件的创建和删除

在这里插入图片描述
在使用createNewFile时会有一个异常需要抛出处理
在这里插入图片描述
创建文件时,如果当前路径文件已存在,返回false,创建失败,同时,如果写入的父级路径不存在也会报错
在这里插入图片描述
createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件
在这里插入图片描述

public class FileDemo4 {public static void main(String[] args) throws IOException {File f1 = new File("E:\\java\\b.txt");//创建文件,如果当前路径文件已存在,返回false//如果父级路径不存在,就会报异常//createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件boolean flag = f1.createNewFile();System.out.println(flag);//true}
}

mkdir()和mkdirs()都是创建文件夹的方法,前面的是创建单级文件夹,后面是创建多级文件夹,如果用mkdir去创建多级文件夹就会报错,但如果用mkdirs去创建单极文件夹也能创建成功

public class FileDemo4 {public static void main(String[] args) throws IOException {File f2 = new File("E:\\java\\aaa");//创建文件夹(目录),如果与已存在文件名重名,则创建失败,也不能创建多级文件夹System.out.println(f2.mkdir());//mkdirs:创建多级文件夹(既可以创建单极文件夹又可以创建多级文件夹)File f3 = new File("E:\\java\\aaa\\bbb\\ccc");System.out.println(f3.mkdirs());System.out.println(f2.delete());//trueSystem.out.println(f3.delete());//true}
}

在这里插入图片描述

delete方法只能删除文件和空的文件夹,并且不走回收站,彻底删除

获取并遍历

在这里插入图片描述
listFiles:获取文件夹中的所有内容,把内容放在数组中返回

public class FileDemo5 {public static void main(String[] args) {File f1 = new File("E:\\HTML");//listFiles:获取文件夹中的所有内容,把内容放在数组中返回File[] files = f1.listFiles();for(File f:files){System.out.println(f);}}
}

在这里插入图片描述
注意:
当调用者表示的路径不存在时,返回null
当调用者表示的路径是文件时,返回null
当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当调用者File表示的路径是一个有隐藏文件的文件夹时,会将里面所有的文件和文件夹的路径放在数组中返回,包括隐藏文件
当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

在这里插入图片描述
listRoots其实就是获取系统的盘符

// 列出所有的盘符File[] arr1 = File.listRoots();System.out.println(Arrays.toString(arr1));

在这里插入图片描述
list获取的就是当前路径下所有的文件或文件夹的名字

//list:获取当前路径下所有的内容(名字)File f1 = new File("E:\\java");String[] arr2 = f1.list();for (String s : arr2) {System.out.println(s);}

在这里插入图片描述
接下来的方法是利用文件名过滤器获取当前该路径下的所有内容

下面是一个获取文件中所有txt文件的例子:

FilenameFilter是一个函数式接口,可以通过匿名内部类的方式进行实现
在这里插入图片描述

		File f2 = new File("E:\\java");//accept方法的形参:依次表示java文件夹里面每一个文件或文件夹的路径//参数一:父级路径//参数二:子级路径//返回值:true表示当前路径保留,false表示当前路径不保留String[] arr3 = f2.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File src = new File(dir, name);//筛选出以txt为后缀的文件if (src.isFile() && name.endsWith(".txt")) {return true;} else return false;}});System.out.println(Arrays.toString(arr3));

利用listFiles()也可以实现这个要求,listFiles()返回一个File对象数组,数组中的元素是File对象,这些对象代表了目录中的文件或子目录的完整路径,进而可以通过调用方法进行判断

		File f3 = new File("E:\\java");File[] arr4 = f3.listFiles();for (File f : arr4) {if (f.isFile() && f.getName().endsWith(".txt")) {System.out.println(f.getName());}}

listFiles()也可以用文件名过滤器的方法来实现,

		File[] arr5 = f4.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.isFile() && pathname.getName().endsWith(".txt");}});System.out.println(Arrays.toString(arr5));System.out.println("--------------------");File[] arr6 = f4.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return new File(dir, name).isFile() && name.endsWith(".txt");}});System.out.println(Arrays.toString(arr6));

FileFilter用于过滤File对象,使用FileFilter时已经拥有了一个File对象,因此可以直接使用该对象的属性而无需再次创建新的File对象
FilenameFilter用于过滤文件名,使用FilenameFilter时由于只获得了文件名,因此如果需要访问文件的属性(如是否是文件),则必须再次使用文件名和目录来创建新的File对象。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenHarmony开发】 tracepoint的机制总结

一、tracepoint 的机制 1.1 DECLARE_HOOK 解析 DECLARE_HOOK(vendor_bond_check_dev_link,TP_PROTO(const struct bonding *bond, const struct slave *slave, int *state), TP_ARGS(bond, slave, state)); ​ // 在已经实现如下宏定义的前提下 // CONFIG_TRACEPOINTS 和 CO…

代码随想录算法训练营DAY41|背包问题 二维 、背包问题 一维、416. 分割等和子集

背包问题 二维 题目链接:背包问题 二维 def bag_weight_problem(n,space,weight,value):dp [[0 for i in range(space1)]for j in range(n)]for i in range(weight[0], space1):dp[0][i]value[0]for j in range(1, n):for k in range(space1):if weight[j]>k:…

力扣410.分割数组的最大值

力扣410.分割数组的最大值 分割数组 使得子数组最大值最小 凡是最小化最大值和最大化最小值的题都是二分答案二分子数组最大值 求当前数组可以分为几段 class Solution {public:int splitArray(vector<int>& nums, int k) {auto check [&](int mid) -> bo…

Leetcode Hot 100 刷题记录 - Day 1

问题描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 示…

AbMole带你探索颅内压力与肌肉生长的联系:一项突破性研究

在生物医学领域&#xff0c;颅内压力&#xff08;ICP&#xff09;的调控机制一直是研究的热点。最近&#xff0c;一项发表在《PLOS ONE》上的研究为我们揭示了颅内压力与后颅窝肌肉生长之间的潜在联系&#xff0c;为我们理解某些慢性头痛的成因提供了新的视角。 颅内压力的异常…

spring-boot-starter-websocket 客户端 服务端 例子

1. 添加依赖 首先&#xff0c;在pom.xml中添加spring-boot-starter-websocket依赖&#xff0c;正如你已经指出的&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId&g…

QEMU(Quick EMUlator)学习

QEMU介绍 QEMU (Quick EMUlator) 是一个开源的虚拟化软件和硬件仿真器&#xff0c;它能实现完整系统仿真或进程级仿真。QEMU 的用途广泛&#xff0c;可以用来运行不同体系结构的程序&#xff0c;测试操作系统和驱动程序&#xff0c;开发嵌入式系统&#xff0c;甚至作为云计算平…

temu跨境选品师是怎么样的一个项目?

TEMU(特穆)跨境选品师项目&#xff0c;作为一项创新的全球商品采购和选品服务&#xff0c;正在逐步改变消费者对于跨境电商产品的认知和选择方式。这个项目不仅仅是一个简单的商品推荐平台&#xff0c;更是一种以数据驱动的精准选品策略的体现&#xff0c;为消费者提供了全新的…

Spring Boot集成vavr快速入门demo

1.什么是vavr&#xff1f; 初闻vavr&#xff0c;感觉很奇怪&#xff0c;咋这个名字&#xff0c;后面看到它的官网我沉默了&#xff0c;怀疑初创团队付费资讯了UC震惊部如何取名字&#xff0c;好家伙&#xff0c;vavr就是java这四个字倒过来&#xff0c;真的是’颠覆’了java……

为什么Mid journey很容易就能做出很有氛围感的图而SD却容易做图很丑?

前言 6月12日&#xff0c;Midjourney更新了一项新的功能——模型个性化&#xff0c;这一项功能最重要的作用就是能够让生成的图像更加符合你自己的审美标准。就像每个艺术家都有自己的独特风格一样&#xff0c;有了这项模型个性化功能的加持&#xff0c;每个人都能生成具有鲜明…

松弛变量(slack variable)与拉格朗日对偶

松弛变量&#xff08;slack variables&#xff09;和拉格朗日对偶&#xff08;Lagrangian duality&#xff09;是优化理论中的两个重要概念&#xff0c;它们之间有着密切的关系&#xff0c;特别是在线性规划和凸优化中。 松弛变量 松弛变量用于将不等式约束转化为等式约束。在…

kali系统几个开机启动项的区别

1、Live system (amd64) 简单的模式 &#xff0c;启动系统&#xff0c;直接进入 Kali&#xff0c;在系统中的所有的操作和设置都会在下次重启时失效。 Kali 中保存/编辑的所有东西都会重启丢失。 2、Live system (amd64 fail-safe mode) 这种模式与 Live (amd64) 类似&#xf…

【机器学习】第5章 朴素贝叶斯分类器

一、概念 1.贝叶斯定理&#xff1a; &#xff08;1&#xff09;就是“某个特征”属于“某种东西”的概率&#xff0c;公式就是最下面那个公式。 2.朴素贝叶斯算法概述 &#xff08;1&#xff09;是为数不多的基于概率论的分类算法&#xff0c;即通过考虑特征概率来预测分类。 …

C#利用SignalR实现通信事例Demo

1.服务端安装SignalR的Nuget包 dotnet add package Microsoft.AspNet.SignalR --version 2.4.3 2.接下来&#xff0c;创建一个ChatHub类&#xff0c;它是SignalR通信的核心&#xff1a; using Microsoft.AspNetCore.SignalR;public class ChatHub : Hub {public static Dict…

MATLAB 二维平面绘图

x 0:0.01:2pi: 大家还记得这个是什么意思吧 就是0到2π 每次所取的数 是相差0.01进行选取的 ysin&#xff08;x&#xff09;: figure (这个意思就是建立一个幕布) plot&#xff08;x&#xff0c;y&#xff09; 这个主要是绘制当前的二维平面的图 但是大家会发现这张图里没有标…

iOS Category

原理&#xff1a; 【iOS】——分类、扩展和关联对象_ios 为什么分类不能加成员变量-CSDN博客 面试题&#xff1a; 1.Category和Extension区别&#xff1f; 在 Objective-C 中&#xff0c;Category 和 Extension 是两种用于向现有类添加新功能的机制&#xff0c;但它们各有特…

反激开关电源输入电解电容选型及计算

输入电解电容波形如下 计算 1、输入电解电容经验选取法 当输入电压为220V20%&#xff08;AC176-264V&#xff09;时 按照输出功率选取&#xff1a;W/μF 耐压&#xff08;400V&#xff0c;输入176-264V最高DC峰值373V&#xff09; 当输入电压为11020%时&#xff08;AC88-132V…

windows服务器一台机器安装多个mysql实例

1、复制安装mysql安装包 2、修改配置文件信息 标注红色部分是需要修改成复制后的包信息 [mysqld] default-time_zone8:00basedirD:/tools/MySQL-Cluster/mysql-53306 datadirD:/tools/MySQL-Cluster/mysql-53306/data default-storage-engineINNODB sql-mode"STRICT_TRANS…

网络运维:企业数字化转型的基石

在数字化时代&#xff0c;网络已经成为企业运营不可或缺的一部分。网络运维作为确保网络稳定、安全和高效运行的关键环节&#xff0c;其重要性不言而喻。本文将探讨网络运维的重要性&#xff0c;并分析其在企业数字化转型中的作用。 网络运维的定义 网络运维&#xff0c;也称…

Amazon Systems Manager中补丁合规性定期扫描

问题 需要使用Amazon Systems Manager对EC2补丁合规性定期扫描。 步骤 点击如下入口界面&#xff1a; 权限使用默认配置&#xff0c;勾选“Scan instances for missing patches daily”每天扫描EC2实例是否存在补丁&#xff0c;来完成合规检查&#xff0c;选择所有实例&…