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.mzph.cn/news/91907.shtml

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

相关文章

【HTML】表格行和列的合并

概述 当我们需要在 HTML 表格中展示复杂的数据时,行和列的合并可以帮助我们实现更灵活的布局和结构。通过合并行和列,我们可以创建具有更多层次和结构的表格,使数据更易于理解和分析。 在 HTML 表格中,我们可以使用 rowspan 和 …

ELK整合springboot(第二课)

一、创建一个springboot的项目 pom文件如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLo…

lv5 嵌入式开发-12 信号灯

目录 1 信号量/灯(semaphore)基本概念 2 信号量&#xff0d;&#xff30;&#xff0f;&#xff36;操作概念 3 三种信号灯 3.1 有名信号灯 3.1.1 打开 3.1.2 关闭 3.1.3 删除 3.2 无名信号灯 3.2.1 初始化 3.2.2 销毁 3.3 信号灯P操作 3.4 信号灯V操作 3.5 示例 …

Visual Studio 中将TAB设置为空格

将TAB设置为空格的原因很多&#xff0c;其中一点是为了统一不同编译器对TAB的解释&#xff0c;防止代码风格在不同编译器下不一致等。 在菜单中选择: 工具-->选项-->文本编辑器--->所有语言-->制表符 在窗口中选择&#xff0c;制表符大小和缩进大小都选为4&#xf…

10.1 国庆节小任务

目录 select实现服务器并发 服务器 客户端 运行现象 select实现服务器并发 服务器 #include<myhead.h>#define PORT 8888 //1024~49151 #define IP "192.168.1.104" //ifconfig查看本机IPint main(int argc, const char *argv[]) {//创建流式…

WiFi网络分析工具Airtool for Mac

Airtool是一款Mac平台上的WiFi网络分析工具&#xff0c;它可以帮助用户监测、分析和管理无线网络。 以下是Airtool的一些主要功能和特点&#xff1a; 实时监测&#xff1a;Airtool可以实时监测当前Mac设备所连接的WiFi网络&#xff0c;包括网络速度、信号强度、连接状态等。信…

Spark SQL

Spark SQL 一、Spark SQL概述二、准备Spark SQL的编程环境三、Spark SQL程序编程的入口四、DataFrame的创建五、DataFrame的编程风格六、DataSet的创建和使用七、Spark SQL的函数操作 一、Spark SQL概述 Spark SQL属于Spark计算框架的一部分&#xff0c;是专门负责结构化数据的…

NIO基础

nio : non-blocking io 非阻塞IO 1. 三大组件 1.1 channel和buffer channel 有点像stream &#xff0c;他就是读写数据的双向通道&#xff0c;可以从channel将数据读入buffer&#xff0c;也可以将buffer的数据写入channel&#xff0c;之前的stream 要么输入&#xff0c;要么…

建筑能源管理(3)——建筑能源监管

为了全面落实科学发展观&#xff0c;提高建筑能源管理水平&#xff0c;进一步降低能源和水资源消耗、合理利用资源&#xff0c;以政府办公建筑和大型公共建筑的运行节能管理为突破口&#xff0c;建立了既有政府办公建筑和大型公共建筑运行节能监管体系&#xff0c;旨在提高政府…

28271-2012 米制超细牙螺纹 公差

声明 本文是学习GB-T 28271-2012 米制超细牙螺纹 公差. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了米制超细牙螺纹的公差和标记。 本标准适用于精密仪器和电子设备等领域的螺纹连接。 2 规范性引用文件 下列文件对于本文件…

windows server 2019 、win11安装docker desktop

Docker Desktop Docker Desktop是可以部署在windows运行docker的应用服务&#xff0c;其基于windos的Hyper-V服务和WSL2内核在windos上创建一个子系统(linux)&#xff0c;从而实现其在windows上运行docker。 前提条件 WSL 查看wsl是否安装 我们可以直接在 cmd 或 powershe…

MySql出错点

一、DDL 1.修改表&#xff0c;添加新的字段时&#xff0c;不要加引号 2.在修改表中字段的类型时&#xff0c;会发生数据截断。 像DATETIME 转化为 TIME 二、DML 1.插入和删除的注意点 2.可以通过 select 来协助插入 3.

Linux 基本语句_4_指针和函数

指针函数 顾名思义&#xff0c;即返回值为指针的函数 int * f (int n){int *p NULL;//空指针return p;//返回一个地址 }函数指针 指向函数的指针&#xff0c;每个函数都有自己的入口地址&#xff0c;函数指针专门指向这些地址#include <stdio.h>int max(int a, int b)…

【Linux】完美解决ubuntu18.04下vi不能使用方向键和退格键

今天在刚安装完ubuntu18.04&#xff0c;发现在使用vi命令配置文件时使用方向键并不能移动光标&#xff0c;而是出现一堆奇怪的英文字母&#xff0c;使用退格键也不能正常地删除内容&#xff0c;用惯了CentOS的我已经感觉到ubuntu没有centos用着丝滑&#xff0c;但是没办法&…

【C++】类和对象(中)

一、类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。但是空类中并不是真的什么都没有&#xff0c;任何类在什么都不写的时候&#xff0c;编译器会自动生成以下 6 个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成…

5G消息发展的前景与挑战

随着5G技术的快速发展和普及&#xff0c;5G消息正逐渐成为全球通信领域的新焦点。 随着5G技术的快速发展和普及&#xff0c;5G消息正逐渐成为全球通信领域的新焦点。 5G消息发展呈现规模化、产业化趋势 自2020年4月国内三大运营商联合发布5G消息白皮书以来&#xff0c;已经过…

【C语言】通讯录系统实现 (保姆级教程,附源码)

目录 1、通讯录系统介绍 2、代码分装 3、代码实现步骤 3.1、制作菜单menu函数以及游戏运行逻辑流程 3.2、封装人的信息PeoInfo以及通讯录Contact结构体类型 3.3、初始化通讯录InitContact函数 3.4、增加联系人AddContact函数 3.5、显示所有联系人ShowContact函数 3.6、…

【Idea】idea、datagrip设置输入法

https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…

CTF-XSS

知识 例子 。2022 CNSS夏令营 To_be_Admin_Again_and_Again XSS攻击. 与admin有关, 可以尝试http://1.117.6.207:65005/admin, 显示Get out, HACKER! Only admin can see the flag!, 说明需要一个admin的验证, 这里想到获取admin的cookie. 每条留言会自动查看, 可以使用XS…

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数&#xff1a; # _*_ Coding : UTF-8 _*_ # Time : 13:14 # Author : YYZ # File : Flask # Project : Python_Project_爬虫 import jsonfrom flask import Flask,request,jsonify import sshapi Flask(__name__)# methods: 指定请求方式 接口解析参数host host_info[…