10.1 File类
前言:
java.io包中的File类是唯一一个可以代表磁盘文件的对象,它定义了一些用于操作文件的方法。通过调用File类提供的各种方法,可以创建、删除或者重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间,等等。本节将针对File类进行详细讲解。
10.1.1 创建File对象
我的笔记:
File类的构造方法
`java.io.File` 类提供了几个构造方法,常用的有:
方法声明 | 功能描述 |
---|---|
File(String pathname) | 通过指定的一个字符串类型的文件路径创建一个File对象 |
File(String parent, String child) | 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象 |
File(File parent, String child) | 根据指定的一个File类的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象 |
这些构造方法允许您使用字符串路径或者 `File` 对象和子路径字符串来创建 `File` 对象。在这些方法中,您需要传入文件路径。
例子
以下是一个简单的示例代码,演示如何使用 `File` 类的构造方法创建 `File` 对象。
import java.io.File;public class Example01 {public static void main(String[] args) {File f = new File("D:\\file\\a.txt"); //使用绝对路径创建File对象File f1 = new File("src\\Hello.java"); //使用相对路径创建File对象System.out.println(f);System.out.println(f1);}
}
在这个例子中,`f` 是通过绝对路径创建的 `File` 对象,而 `f1` 是通过相对路径创建的。
注意事项
在Windows中,目录的路径分隔符是反斜线 `\`,但在Java字符串中,`\` 是一个转义字符,所以要写成 `\\`。也可以使用正斜线 `/` 作为路径分隔符,例如 "D:/file/a.txt"。
总结
在这一节中,我们学习了如何使用 `java.io.File` 类的构造方法创建 `File` 对象。这些构造方法允许我们使用不同的方式(绝对路径、相对路径、父路径+子路径)来创建 `File` 对象,非常灵活。同时,我们也注意到了在路径字符串中要正确使用路径分隔符。
10.1.2 File类常用的方法
`java.io.File` 类具有一系列的方法,可以用来操作文件和目录。以下是一些常用方法的概览和描述。
#### 常用方法
1. **exists()**
- 返回类型:`boolean`
- 描述:判断File对象指向的文件或目录是否存在。若存在则返回`true`,否则返回`false`。
2. **delete()**
- 返回类型:`boolean`
- 描述:删除File对象指向的文件或目录。若删除成功则返回`true`,否则返回`false`。
3. **createNewFile()**
- 返回类型:`boolean`
- 描述:当File对象指向的文件不存在时,该方法将尝试创建一个新文件。若创建成功则返回`true`,否则返回`false`。
4. **getName()**
- 返回类型:`String`
- 描述:返回File对象指向的文件或目录的名称。
5. **getPath() 和 getAbsolutePath()**
- 返回类型:`String`
- 描述:`getPath()` 返回File对象指向的路径,而 `getAbsolutePath()` 返回File对象指向的绝对路径。
6. **getParentFile()**
- 返回类型:`String`
- 描述:返回File对象指向的文件或目录的父目录。
7. **canRead() 和 canWrite()**
- 返回类型:`boolean`
- 描述:判断File对象指向的文件或目录是否可读/可写。若是则返回`true`,否则返回`false`。
8. **isFile() 和 isDirectory()**
- 返回类型:`boolean`
- 描述:判断File对象指向的是否是文件或目录。若是则返回`true`,否则返回`false`。
9. **isAbsolute()**
- 返回类型:`boolean`
- 描述:判断File对象指向的文件或目录的路径是否是绝对路径。
10. **lastModified()**
- 返回类型:`long`
- 描述:返回文件最后修改时间的毫秒值,从1970年1月1日0时0分0秒算起。
11. **length()**
- 返回类型:`long`
- 描述:返回文件的长度,单位是字节。
12. **list() 和 listFiles()**
- 返回类型:`String[]` 和 `File[]`
- 描述:`list()` 递归列出指定目录的全部内容(包括子目录与文件)的名称,`listFiles()` 返回一个包含File对象所有子文件和子目录的File数组。
#### 例子
import java.io.File;public class Example02 {public static void main(String[] args) {File file = new File("src/test.txt");System.out.println("文件是否存在:" + file.exists());System.out.println("文件名:" + file.getName());System.out.println("文件大小:" + file.length() + " bytes");System.out.println("文件相对路径:" + file.getPath());System.out.println("文件绝对路径:" + file.getAbsolutePath());System.out.println("文件的父级对象是否为文件:" + file.isFile());System.out.println("文件删除是否成功:" + file.delete());}
}
#### 特别的方法
1. **createTempFile() 和 deleteOnExit()**
- 描述:`createTempFile()` 用于创建一个临时文件。`deleteOnExit()` 方法在Java虚拟机退出时自动删除临时文件。
import java.io.File;
import java.io.IOException;public class Example03 {public static void main(String[] args) throws IOException {File f = File.createTempFile("itcast-", ".txt");f.deleteOnExit(); // Java虚拟机退出时自动删除文件System.out.println("f是否为文件:" + f.isFile());System.out.println("f的相对路径:" + f.getPath());}
}
#### 注意事项和小技巧
- 在使用 `delete()` 方法删除文件或目录前,务必先使用 `exists()` 方法检查其是否存在。
- 使用 `createNewFile()` 创建新文件时,要处理可能抛出的 `IOException` 异常。
- 利用 `createTempFile()` 和 `deleteOnExit()` 可以方便地管理临时文件,无需手动删除。
10.1.3 遍历目录下的文件
我的笔记:
遍历目录
`java.io.File` 类提供了 `list()` 方法,该方法可以返回一个目录下所有文件和目录的名称字符串数组。结合这些名称,你可以遍历指定目录下的所有文件。
1. 遍历指定目录下的所有文件
这是最基础的遍历方式,以下是一个简单的实例演示:
import java.io.File;public class Example04 {public static void main(String[] args) {File file = new File("D:\\javase03");if(file.isDirectory()) {String[] names = file.list();for (String name : names) {System.out.println(name);}}}
}
在这个示例中,我们创建了一个指向 "D:\\javase03" 目录的 `File` 对象。我们通过调用 `isDirectory()` 方法判断这个路径是否指向一个存在的目录。如果是,我们就调用 `list()` 方法来获取该目录下所有文件和子目录的名称,并依次打印它们。
注意事项
- **检查目录存在性**:
在调用 `list()` 方法之前,通过 `isDirectory()` 方法检查指定路径是否是一个存在的目录是很重要的,因为 `list()` 方法在路径不是一个目录或者目录不存在时会返回 null。
- **遍历子目录**:
如果需要遍历包括子目录中的文件在内的所有文件,需要递归地处理每个子目录。
笔记总结
- `java.io.File` 类中的 `list()` 方法可以用于获取一个目录下所有文件和目录的名称。
- 在调用 `list()` 方法之前,应该使用 `isDirectory()` 方法检查路径是否指向一个存在的目录。
- 可以使用三种不同的方式进行遍历:遍历指定目录下的所有文件,遍历指定目录下具有指定扩展名的文件,以及遍历包括子目录中的文件在内的所有文件。
- 对于需要深度遍历子目录的场景,需要递归地处理每个子目录。
10.1.4 删除文件及目录
#### 目标:
- 学习如何使用Java中的File类的delete()方法来删除文件或目录。
- 理解如何递归地删除非空目录。
#### 关键概念:
1. **File类的delete()方法:**
- **作用:** 用于删除由File对象表示的文件或目录。
- **返回值:** 如果成功删除则返回true,否则返回false。
2. **非空目录的删除:**
- **概述:** File类的delete()方法无法直接删除包含文件或子目录的目录。
- **解决方法:** 需要递归地删除目录中的所有子目录和文件。
#### 示例代码:
##### 删除文件或空目录
import java.io.*;
public class Example07 {public static void main(String[] args) {File file = new File("D:\\hello");if (file.exists()) {System.out.println(file.delete()); // 如果hello目录是空的,将会被删除并返回true。}}
}
##### 递归删除非空目录
import java.io.*;
public class Example08 {public static void main(String[] args) {File file = new File("D:\\hello");deleteDir(file);System.out.println("删除成功!");}public static void deleteDir(File dir) {if (dir.exists()) {File[] files = dir.listFiles();for (File file : files) {if (file.isDirectory()) {deleteDir(file);} else {file.delete();}}}dir.delete(); // 最后删除原始目录}
}
笔记总结:
1. **基础操作:**
- 使用`delete()`方法可以删除文件或空目录。
- 如果尝试删除非空目录,`delete()`方法将返回false,表示删除失败。
2. **递归删除:**
- 要删除非空目录,需要递归地遍历并删除所有子目录和文件。
- 示例代码Example08演示了如何实现这一操作,首先检查目录是否存在,然后获取目录中的所有文件和子目录,并对每一个进行检查。如果是目录,就递归调用`deleteDir`方法;如果是文件,就直接删除。最后,删除原始目录。
相关文章:
10.1 File类
前言: java.io包中的File类是唯一一个可以代表磁盘文件的对象,它定义了一些用于操作文件的方法。通过调用File类提供的各种方法,可以创建、删除或者重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间&…...
[论文笔记]UNILM
引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…...
LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略
LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略 导读:2023年9月25日,Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。Colossal-LLaMA-2项目的技术细节,主要核心要点总结如下: >> 数据处…...
国庆作业2
select实现服务器并发 代码: #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.1.5"int main(int argc, const char *argv[]) {//创建流式套接字…...
fork仓库的代码如何同步主仓库代码
1.背景 我fork了一份 jekyll-theme-chirpy 仓库的代码(基于 jekyll 的自建博客仓库,可以免服务器),我需要在上面更新我的博客文章,但是我又想一直同步 jekyll-theme-chirpy 仓库的新功能,这样我可以更新自己的博客功能。所以我就…...
【Axure】元件库和母版、常见的原型规范、静态原型页面制作
添加现有元件库 点击元件库——载入 当然也可以创建元件库,自己画自己保存 建立京东秒杀母版 静态原型页面的制作 框架 选择以iphone8的界面大小为例,顶部状态栏高度为20 左侧类似于标尺,因为图标、文字离最左侧的间距是不一样的 信…...
在设备树中描述中断
参考文档: 内核 Documentation\devicetree\bindings\interrupt-controller\interrupts.txt 在设备树中,中断控制器节点中必须有一个属性: interrupt-controller,表明它是“中断控制器”。 还必须有一个属性: #interru…...
ccf_csp第一题汇总
ccf_csp第一题汇总 printf()输出格式大全(附 - 示例代码)现值计算AcWing 4699. 如此编码AcWing 4509. 归一化处理(小数位数根号函数)AcWing 4454. 未初始化警告AcWing 4280. 序列查询AcWing 4006. 数组推导(小陷阱)AcWing 3292. 称检测点查询AcWing 3287…...
uniapp 实现下拉筛选框 二次开发定制
前言 最近又收到了一个需求,需要在uniapp 小程序上做一个下拉筛选框,然后找了一下插件市场,确实有找到,但不过他不支持搜索,于是乎,我就自动动手,进行了二开定制,站在巨人的肩膀上&…...
实现单行/多行文本溢出
在日常开发展示页面,如果一段文本的数量过长,受制于元素宽度的因素,有可能不能完全显示,为了提高用户的使用体验,这个时候就需要我们把溢出的文本显示成省略号。 一. 单行文本溢出 即文本在一行内显示,超出…...
Spring Boot中的Binder类
介绍 Spring Boot中的Binder类是一个用于绑定属性的工具类。它可以将配置文件中的属性值绑定到Java对象中,从而方便地进行配置管理。 简单示例 import org.springframework.boot.context.properties.bind.Binder; import org.springframework.core.env.Environmen…...
leetcode之打家劫舍
leetcode 198 打家劫舍 leetcode 213 打家劫舍 II leetcode 337. 打家劫舍 III 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#…...
走进Spring的世界 —— Spring底层核心原理解析(一)
文章目录 前言一、Spring中是如何创建一个对象二、Bean的创建过程三、推断构造方法四、AOP大致流程五、Spring事务 前言 ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("config.xml"); UserService userService (UserService) cont…...
快看看你的手机有没有:谷歌Android全面封杀此类软件!
谷歌坐不住了,因为Android应用商店中,充斥着大量可窃取用户数据的应用,所以必然要出手整治了。 一款名叫“SonicSpy”软件是整个事情的导火索,而该应用是典型的窃取用户数据的应用,其除了可以从手机中提取个人数据外&…...
spark ui 指南
spark ui 指南 1.sparkUI 基本介绍2.jobs页面3.stages 页面4.storage 页面5.environment 页面6.ececutor 页面7 sql 页面 spark ui 是反应一个spark 作业执行情况的页面,通过查看作业的执行情况,分析作业运行的状态. 1.sparkUI 基本介绍 进入运行主页面如下,主要有6各部…...
【分布式事务】
文章目录 解决分布式事务的思路seata四种模式1. XA模式2. AT模式AT模式与XA模式的区别是什么?脏写问题 3. TCC模式事务悬挂和空回滚 4. SAGA模式 四种模式对比口述AT模式与TCC模式高可用 什么是分布式事务? 分布式事务,就是指不是在单个服务或…...
linux 清除卸载jenkins
1、停服务进程 查看jenkins服务是否在运行,如果在运行,停掉 查看服务 ps -ef|grep jenkins 停掉进程 kill -9 XXX2、查找安装目录 find / -name "jenkins*"3、删掉相关目录 删掉相关安装目录 rm -rf /root/.jenkins/# 删掉war包 rm -rf /…...
番外4:VMware安装
step4: 安装过程中,有些选项不需要点(安装地址建议选C盘或默认,装载在其他盘后续会报错),如: may error(本人猜测安装虚拟机完整版需要C盘的一些桥插件支持): step5: 安装虚拟机成功…...
Oracle 19.20 patch 注意事项
1. 打patch 用root 打 /u01/app/19.0.0/grid/OPatch/opatchauto apply /u01/app/patch/35319490 2.打patch 之前 所有NODE上OPatch 版本要一样 3. OPatch 目录不要是root权限 4.打一台,一台自动重启。 有几个node 在几个node 打。patch 都要传到不同的node上 …...
ElementUI之增删改及表单验证
⭐⭐本文章收录与ElementUI原创专栏:ElementUI专栏 ⭐⭐ ElementUI的官网:ElementUI官网 目录 一.前言 二.使用ElementUI完成增删改 2.1 后台代码 2.2 前端代码 三.使用ElementUI完成表单验证 一.前言 本章是继上一篇的基础之上在做完善࿰…...
【Java 进阶篇】深入理解 JDBC:Java 数据库连接详解
数据库是现代应用程序的核心组成部分之一。无论是 Web 应用、移动应用还是桌面应用,几乎都需要与数据库交互以存储和检索数据。Java 提供了一种强大的方式来实现与数据库的交互,即 JDBC(Java 数据库连接)。本文将深入探讨 JDBC 的…...
Web开发-session介绍
目录 session介绍session使用场景session具体使用需要注意的是 session介绍 session 可以被看作是一种缓冲区,用于在多个请求之间存储和传递用户数据。在 Web 应用程序中,session 通常用于存储用户登录信息、购物车数据、用户偏好设置等。当用户在应用程…...
基于Qt Creator开发的坦克大战小游戏
目录 介绍开发环境技术介绍安装说明项目目录设计思想项目介绍运行演示知识点记录Gitee源码链接 介绍 !!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!ÿ…...
小说推文和短剧推广以及电影达人带货电影票
小说推文、短剧推广、电影达人(带或电影票)都可以通过“巨量推文“进行申请授权 小说推文和短剧推广是什么? 小说推文和短剧推广的逻辑其实一样,分为cpa拉新和cps分成的推广形式 cpa拉新是你推广的用户必须为新用户,…...
朴素贝叶斯分类(下):数据挖掘十大算法之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
9.30作业
C语言基础考题(40) 选择题 20分每题2分 1、已知字母A的ASCII码为十进制数值65,且S为字符型,则执行语句SA6-3;后S中的值为 ( ) A.D B.68 C.不确定的值 D.C 2、若有定义语句:int a12;,则执…...
[GWCTF 2019]枯燥的抽奖
参考 https://www.cnblogs.com/AikN/p/15764428.html [GWCTF 2019]枯燥的抽奖-CSDN博客 打开环境 笑死我了,怎么那么像我高中校长 查看源代码 看到check.php,去访问一下 ok看到源代码了 因为上次做过,看到这个我就想到用php_mt_seed逆推…...
vue3中sync修饰符的使用
props是子组件与父组件进行通信的常用方式,使用步骤主要有以下几个: 1. 在子组件中定义props要从父组件接收的变量(变量的类型必须写明,默认值可选) // 这里以 document.vue 子组件为例 // 通过 defineProps 宏的方…...
Qt全屏显示与退出
仿照 按Escape键退出程序中的实现,我们在程序开始的时候全屏显示,按esc键的时候退出全屏。 showFullScreen 全屏显示只需要调用QWidget类(QMainWindow也是一个QWidget类)的 showFullScreen() 成员函数即可。 退出全屏&#x…...
OpenCV之直线曲线拟合
直线拟合fitLine void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps ); points:二维点的数组或vector line:输出直线,Vec4f (2d)或Vec6f (3d)的vector distType:距离类型 param:距离参数 reps:径向的精度参数 a…...
b2b电子商务网站盈利模式/国家高新技术企业
计算机应用专业英文求职信导语:“人生在勤,不索何获”,我会努力工作,把工作做得更好,更出色来回报你的信任,愿与贵单位荣辱与共,与同事携手并进,在平凡的工作中来实现我人生的价值&a…...
wordpress是哪个公司的/seo工资一般多少
2016年4月11日作业 一、法律法规和标准规范1、中国标准划分为哪四个层次?要求最低的是哪个?国家标准、行业标准、地方标准和企业标准,其中要求最低的是国家标准。2、国家标准的制订程序包括哪些?前期准备、立项、起草、征求意见、…...
可以做平面设计兼职的网站/seo权重优化软件
201. 数字范围按位与 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4 示例 2…...
电子商务网站建设与规划/百度上怎么免费开店
目 录 摘 要 i Abstract ii 1 绪论 1 1.1 课题背景及意义 1 1.2 开发工具的选用及介绍 1 1.3 选题目的和意义 2 1.4 本文主要研究的内容 2 2 需求分析 3 2.1 可行性分析 3 2.2 扫雷游戏功能描述 3 2.3 扫雷游戏用例图 4 2.4 扫雷游戏功能需求 4 2.5 扫雷游戏界面需求 5 2.6 扫雷…...
Axure只是做网站吗/2023年免费进入b站
转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 阻塞阻塞操作非阻塞操作阻塞方式-read- 实现阻塞方式-write- 实现非阻塞方式的读写操作实例 --- 读阻塞的实…...
wordpress 小说多站/网站seo优化排名
HTML5是目前HTML的最新标准。在笔者写这篇文章时,HTML5仍在积极的发展。HTML5除了提供新的标签信息外,同时还包含了新的应用程序编程接口(API),这样可以使我们能够在网页上提供更多丰富的多媒体和互动功能,而无需使用专有的插件。…...