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`方法;如果是文件,就直接删除。最后,删除原始目录。

 

 

 

 

 

 

 

 

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

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

相关文章

12、Kubernetes中KubeProxy实现之iptables和ipvs

目录 一、概述 二、iptables 代理模式 三、iptables案例分析 四、ipvs案例分析 一、概述 iptables和ipvs其实都是依赖的一个共同的Linux内核模块:Netfilter。Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供…

Docker从认识到实践再到底层原理(九)|Docker Compose 容器编排

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

Mysql生产随笔

目录 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 1.2常见错误解决方案 2.关于时区 3.内存占用优化 记录一下生产过程中的一些场景和命令使用方法,不定期进行更新 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 sho…

Java后端接口编写流程

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java后端接口编写流程 Java后端接口编写流程,更具业务逻辑编写Java后端接口,提供给前端访问 实现逻辑流程 POJO:实体类编写 Data B…

黑豹程序员-架构师学习路线图-百科:Java

1、简介 Java是Sun公司推出的一门面向对象的编程语言,它是一种通过解释方式来执行的语言。 它出身名门,简化C而来,但并未照搬。继承了C语言各种优点,却摒弃了C里的多继承、指针等概念,因此Java语言具有功能强大和简单…

CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明

国庆假期,闲着没事,在家研究技术~ 上一篇,我们介绍了动画剪辑、动画组件以及基本的使用流程,感兴趣的朋友可以前往阅读: CocosCreator 动画系统-动画剪辑和动画组件介绍。 今天,主要介绍动画编辑器相关功能…

【进阶C语言】动态内存分配

本章大致内容介绍: 1.malloc函数和free函数 2.calloc函数 3.realloc函数 4.常见错误案例 5.笔试题详解 6.柔性数组 一、malloc和free 1.malloc函数 (1)函数原型 函数参数:根据用户的需求需要开辟多大的字节空间&#xff…

C++实现集群聊天服务器

C实现集群聊天服务器 JSON Json是一种轻量级的数据交换模式(也叫做数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。见解和清晰的层次结构使得Json称为理想的数据交换语言。易于阅读和编写。同时也易于支持机器解析和生成&am…

Qt::图层框架-图片图层-序列图层-QGraphicsPixmapItem

二维矢量动画智能制作软件开发合集 链接:软件开发技术分享及记录合集 个人开发二维矢量动画智能制作软件界面如下: 目录 一、图片序列图层原理 二、图片序列图层代码实现 三、图片序列图层软件测试视频 结束语 一、图片序列图层原理 本软件的11种…

【Java 进阶篇】深入理解 JDBC:Java 数据库连接详解

数据库是现代应用程序的核心组成部分之一。无论是 Web 应用、移动应用还是桌面应用,几乎都需要与数据库交互以存储和检索数据。Java 提供了一种强大的方式来实现与数据库的交互,即 JDBC(Java 数据库连接)。本文将深入探讨 JDBC 的…

vue 实现弹出菜单,解决鼠标点击其他区域的检测问题

弹出菜单应该具有的功能,当鼠标点击其他区域时,则关闭该菜单。 问题来了,怎么检测鼠标点击了其他区域而不是当前菜单? 百度“JS检测区域外的点击事件”,会发现有很多方法,有递归检测父元素,有遍…

装饰器模式详解和实现(设计模式 二)

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地将对象添加到现有对象中,以提供额外的功能,同时又不影响其他对象。 实现示例 1.定义一个接口或抽象类,表示被装饰对象的公共接口 //抽…

mathtype试用期后如何继续使用?

MathType7已经正式发布,作为一款强大的数学公式编辑器可以将编辑好的公式保存成多种图片格式或透明图片模式,可以很方便的添加或移除符号、表达式等模板(只需要简单地用鼠标拖进拖出即可),也可以很方便地修改模板,为理…

NLP的不同研究领域和最新发展的概述

一、介绍 作为理解、生成和处理自然语言文本的有效方法,自然语言处理 (NLP) 的研究近年来迅速普及并被广泛采用。鉴于NLP的快速发展,获得该领域的概述和维护它是困难的。这篇博文旨在提供NLP不同研究领域的结构化概述,…

Python集成开发环境(IDE):WingPro for Mac

WingPro for Mac是一款Python集成开发环境(IDE)软件,它提供了一系列强大的工具和功能,帮助Python开发人员提高开发效率和质量。 WingPro for Mac拥有直观的用户界面和强大的调试器,可以帮助用户快速定位问题和修复错误…

fcntl函数 非阻塞轮询

fcntl() 在打开的文件描述符 FD 上执行下面描述的操作之一。 操作由 cmd 确定。 fcntl() 可以采用可选的第三个参数。 是否需要此参数由 cmd 确定。 所需的参数类型在后面的括号中指示。 每个cmd名称(在大多数情况下&…

MySQL学习笔记23

逻辑备份: 1、回顾什么是逻辑备份? 逻辑备份就是把数据库、数据表或者数据进行导出,导出到一个文本文件中。 2、逻辑备份工具: mysqldump:提供全库级、数据库级别以及表级别的数据备份。 mysqldumpbinlog&#xff…

【汇编的救赎】汇编语言入门必看基本知识点

汇编语言是一种低级语言,用于编写计算机程序。它直接操作计算机硬件,提供了对处理器寄存器、内存和指令等底层资源的直接访问。汇编语言的语法简单明了,每条指令都对应着一条机器指令,具有高度的灵活性和效率。通过汇编语言&#…

BUUCTF reverse wp 81 - 85

[SCTF2019]babyre 反编译失败, 有花指令 有一个无用字节, 阻止反编译, patch成0x90 所有标红的地方nop掉之后按p重申函数main和loc_C22, F5成功 int __cdecl main(int argc, const char **argv, const char **envp) {char v4; // [rspFh] [rbp-151h]int v5; // [rsp10h] [rb…