(每日持续更新)jdk api之File基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

一、java.io

1.18 File

在 Java 中,File 类用于表示文件或目录的路径。它提供了一组方法,使得可以查询文件或目录的属性、创建新的文件或目录,删除文件或目录,以及获取文件列表等操作。以下是关于 File 类的主要信息:

File 类介绍:
  • 包路径: java.io

File 类所有字段:

File 类没有定义任何字段。

File 类构造方法:
  • File(String pathname)

    • 根据给定的路径名字符串创建一个新的 File 实例。

  • File(String parent, String child)

    • 根据指定的父路径名字符串和子路径名字符串创建一个新的 File 实例。

  • File(File parent, String child)

    • 根据指定的父抽象路径名和子路径名字符串创建一个新的 File 实例。

File 类方法摘要:

以下是 File 类中一些主要的方法:

  1. 文件路径相关方法:

    • String getPath() 返回 File 对象的路径名字符串。

    • String getAbsolutePath() 返回 File 对象的绝对路径名字符串。

    • String getParent() 返回 File 对象的父目录的路径名字符串。

    • File getParentFile() 返回 File 对象的父目录的抽象路径名。

    • String getName() 返回 File 对象的名称。

  2. 文件状态相关方法:

    • boolean exists() 测试此抽象路径名表示的文件或目录是否存在。

    • boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。

    • boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。

    • boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。

    • boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。

  3. 文件操作方法:

    • boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

    • boolean mkdir() 创建由此抽象路径名命名的目录。

    • boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。

    • boolean delete() 删除由此抽象路径名表示的文件或目录。

  4. 文件列表方法:

    • String[] list() 返回一个字符串数组,这些字符串指定了由此抽象路径名表示的目录中的文件和目录。

    • File[] listFiles() 返回一个抽象路径名数组,这些路径名表示由此抽象路径名表示的目录中的文件和目录。

  5. 其他方法:

    • boolean renameTo(File dest) 重新命名由此抽象路径名表示的文件。

    • long lastModified() 返回由此抽象路径名表示的文件最后一次被修改的时间。

    • long length() 返回由此抽象路径名表示的文件的长度(以字节为单位)。

简单使用例子:

以下是一个简单的例子,演示了如何使用 File 类创建、查询和删除文件:

javaCopy code
import java.io.File;
import java.io.IOException;
​
public class FileExample {
​public static void main(String[] args) {// 创建一个新文件File newFile = new File("example.txt");
​try {if (newFile.createNewFile()) {System.out.println("File created: " + newFile.getAbsolutePath());} else {System.out.println("File already exists.");}
​// 查询文件属性System.out.println("File name: " + newFile.getName());System.out.println("File path: " + newFile.getPath());System.out.println("Absolute path: " + newFile.getAbsolutePath());System.out.println("Is directory? " + newFile.isDirectory());System.out.println("Is file? " + newFile.isFile());System.out.println("File length: " + newFile.length() + " bytes");
​// 删除文件if (newFile.delete()) {System.out.println("File deleted.");} else {System.out.println("Unable to delete file.");}} catch (IOException e) {e.printStackTrace();}}
}

在这个例子中,我们首先创建一个 File 对象表示一个名为 "example.txt" 的文件,然后通过 createNewFile() 方法创建文件。接着,我们查询文件的一些属性,并最后使用 delete() 方法删除文件。请注意,实际应用中可能需要处理异常情况,例如文件已存在或文件无法创建等情况。

应用场景

File 类主要用于表示文件和目录的路径,并提供一组方法用于查询和操作文件系统。以下是一些 File 类的常见应用场景:

  1. 文件和目录的创建、查询和删除:

    • 使用 File 类可以轻松地创建新的文件或目录,查询文件属性(如路径、大小、是否为目录等),以及删除文件或目录。

    javaCopy code
    File newFile = new File("example.txt");
    ​
    // 创建文件
    newFile.createNewFile();
    ​
    // 查询文件属性
    System.out.println("File name: " + newFile.getName());
    System.out.println("Is directory? " + newFile.isDirectory());
    System.out.println("File length: " + newFile.length() + " bytes");
    ​
    // 删除文件
    newFile.delete();
  2. 目录中文件列表的获取:

    • 使用 list()listFiles() 方法可以获取目录中的文件列表,从而遍历目录中的文件和子目录。

    javaCopy code
    File directory = new File("my_directory");
    ​
    // 获取目录中的文件列表
    String[] fileList = directory.list();
    File[] fileArray = directory.listFiles();
    ​
    // 遍历文件列表
    for (File file : fileArray) {System.out.println("File name: " + file.getName());
    }
  3. 文件和目录的操作:

    • File 类提供了一些方法,如 renameTo() 用于重命名文件,mkdir()mkdirs() 用于创建目录。

    javaCopy code
    File oldFile = new File("old_name.txt");
    File newFile = new File("new_name.txt");
    ​
    // 重命名文件
    oldFile.renameTo(newFile);
    ​
    // 创建目录
    File newDirectory = new File("new_directory");
    newDirectory.mkdir();
    ​
    // 创建目录,包括父目录
    File nestedDirectory = new File("parent/child/grandchild");
    nestedDirectory.mkdirs();
  4. 文件的最后修改时间和大小的查询:

    • 使用 lastModified() 方法可以获取文件的最后修改时间,而 length() 方法可以获取文件的大小。

    javaCopy code
    File file = new File("example.txt");
    ​
    // 获取最后修改时间
    long lastModifiedTime = file.lastModified();
    ​
    // 获取文件大小
    long fileSize = file.length();
  5. 文件是否可读或可写的检查:

    • 使用 canRead()canWrite() 方法可以检查文件是否可读和可写。

    javaCopy code
    File file = new File("example.txt");
    ​
    // 检查文件是否可读
    boolean isReadable = file.canRead();
    ​
    // 检查文件是否可写
    boolean isWritable = file.canWrite();

总体而言,File 类广泛用于文件和目录的操作,包括文件的创建、查询、删除,目录中文件列表的获取,文件的属性查询等。这些功能使得 File 类在文件系统操作中非常有用。在实际应用中,我们通常会使用 java.nio.file 包中的更先进的文件操作 API,但 File 类仍然是许多传统文件操作场景的良好选择。

实战例子

在实际项目中,File 类可以用于处理文件和目录的各种操作。以下是一个简单的项目实战例子,假设有一个日志系统,需要将日志信息写入文件,并定期进行日志归档。

首先,创建一个 LogWriter 类,负责将日志信息写入文件:

javaCopy code
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class LogWriter {
​private File logFile;
​public LogWriter(String logFileName) {this.logFile = new File(logFileName);initializeLogFile();}
​private void initializeLogFile() {try {if (logFile.createNewFile()) {System.out.println("Log file created: " + logFile.getAbsolutePath());}} catch (IOException e) {e.printStackTrace();}}
​public void writeLog(String message) {try (FileWriter fileWriter = new FileWriter(logFile, true)) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String timestamp = dateFormat.format(new Date());
​fileWriter.write("[" + timestamp + "] " + message + "\n");System.out.println("Log written: " + message);} catch (IOException e) {e.printStackTrace();}}
}

然后,创建一个 LogArchiver 类,负责定期归档日志文件:

javaCopy code
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class LogArchiver {
​private static final String LOG_DIRECTORY = "logs";private static final String ARCHIVE_DIRECTORY = "archives";
​public void archiveLogs() {try {// 创建日志和归档目录createDirectoryIfNotExists(LOG_DIRECTORY);createDirectoryIfNotExists(ARCHIVE_DIRECTORY);
​// 获取当前日期作为归档目录名SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");String archiveDirectoryName = ARCHIVE_DIRECTORY + File.separator + dateFormat.format(new Date());
​// 创建归档目录createDirectoryIfNotExists(archiveDirectoryName);
​// 获取当前日志文件路径String currentLogFileName = LOG_DIRECTORY + File.separator + "log.txt";Path currentLogFilePath = Path.of(currentLogFileName);
​// 构造归档目录下的归档文件路径String archiveLogFileName = archiveDirectoryName + File.separator + "log.txt";Path archiveLogFilePath = Path.of(archiveLogFileName);
​// 移动日志文件到归档目录Files.move(currentLogFilePath, archiveLogFilePath, StandardCopyOption.REPLACE_EXISTING);System.out.println("Logs archived to: " + archiveLogFilePath);} catch (IOException e) {e.printStackTrace();}}
​private void createDirectoryIfNotExists(String directoryName) throws IOException {File directory = new File(directoryName);if (!directory.exists() && directory.mkdirs()) {System.out.println("Directory created: " + directory.getAbsolutePath());}}
}

最后,创建一个 Main 类,演示如何使用 LogWriter 记录日志,并使用 LogArchiver 定期归档日志文件:

javaCopy code
public class Main {
​public static void main(String[] args) {LogWriter logWriter = new LogWriter("logs/log.txt");
​// 写入日志logWriter.writeLog("Log entry 1");logWriter.writeLog("Log entry 2");
​// 定期归档日志LogArchiver logArchiver = new LogArchiver();logArchiver.archiveLogs();}
}

在这个例子中,LogWriter 类用于将日志写入文件,LogArchiver 类用于定期归档日志文件。这是一个简单的项目实战例子,实际项目中可能会涉及更多的日志处理和配置。

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

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

相关文章

libcurl使用默认编译的winssl进行https的双向认证

双向认证: 1.服务器回验证客户端上报的证书 2.客户端回验证服务器的证书 而证书一般分为:1.受信任的根证书,2不受信任的根证书。 但是由于各种限制不想在libcurl中增加openssl,那么使用默认的winssl也可以完成以上两种证书的双…

可单独设定检测电压/解除电压的电压检测器IC“NV3600”系列和窗口电压检测器IC“NV3601”系列 发布上市

解决各种电压监测难题、用于车载设备和工业设备 可单独设定检测电压/解除电压的电压检测器IC“NV3600”系列 和窗口电压检测器IC“NV3601”系列 发布上市 日清纺微电子发布要上市两款用于车载设备和工业设备的电压检测器IC,一款是可单独设定检测电压和解除电压并可设…

多汗症的病因是什么?

多汗症的病因可以分为多种因素,其中一些是内在的疾病因素,一些是外在的环境因素。 首先,遗传因素是多汗症的一个重要原因。多汗症具有一定的遗传倾向,如果家族中有其他成员也患有多汗症,那么个体患有多汗症的风险可能…

Netty开篇——BIO章(二)

Java BIO 基本介绍 属于传统的 java io编程,内容见java.io包中BIO(blocking I/O) : 同步阻塞,服务器实现模式为个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线…

数字化转型的关键:JVS低代码的列表页导入功能解析

在当今数字化时代,数据的管理和迁移变得至关重要。为了满足广大用户的需求,JVS低代码精心打造了“列表页导入功能”。这个功能专为高效处理列表页数据而设计,为用户提供了简单、便捷的数据导入、导出和模板下载服务。 列表页导入功能 列表页…

1、理解Transformer:革新自然语言处理的模型

目录 一、论文题目 二、背景与动机 三、卖点与创新 四、解决的问题 五、具体实现细节 0. Transformer 架构的主要组件 1. 注意力、自注意力(Self-Attention)到多头注意力(Multi-Head Attention) 注意力到底是做什么的&…

基于JAVA+ssm智能旅游线路规划系统设计与实现【附源码】

基于JAVAssm智能旅游线路规划系统设计与实现【附源码】 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql…

Neo4j恢复

主要记录windows环境下从备份文件中恢复Neo4j, Linux环境同理 备份在上一篇中有介绍,参考: Neo4j备份-CSDN博客 误删数据 为了模拟误删除场景,我们查询Person,并模拟误操作将其进行删除; match(p:Person) return …

SQL基础知识3

一、删除数据 1、delete操作 删除之前一定要查询一下,确保删除的数据是对的 逻辑删除:在表中新增一个字段:flag/status 二、更新数据 本质上的逻辑删除 三、查询数据 1、联表查询 1、内连接 交集的部分叫内连接 小知识:一般…

Spark: 检查数据倾斜的方法以及解决方法总结

1. 使用Spark UI Spark UI提供了一个可视化的方式来监控和调试Spark作业。你可以通过检查各个Stage的任务执行时间和数据大小来判断是否存在数据倾斜。 任务执行时间: 如果某个Stage中的大部分任务很快完成,但有少数任务执行时间非常长,这可能是数据倾…

thinkphp美容SPA管理系统源码带文字安装教程

thinkphp美容SPA管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 基于thinkphp3.23B-JUI1.2开发,权限运用了Auth类认证,权限可以细分到每个功能, 增删改查功能一应俱全,整合了…

LeetCode_5_中等_最长回文子串

文章目录 1. 题目2. 思路及代码实现(Python)2.1 动态规划2.2 中心扩展算法 1. 题目 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入&#…

随机过程——卡尔曼滤波学习笔记

一、均方预测和随机序列分解 考虑随机序列 使用预测 定义 称为的均方可预测部分。 若相互独立,则是均方不可预测的。 定义随机序列的新息序列 V(k)基于样本观测的条件均值为0,即均方不可预测。 V(k)与是正交的,即。 二、卡尔曼滤波 …

目标检测脚本之mmpose json转yolo txt格式

目标检测脚本之mmpose json转yolo txt格式 一、需求分析 在使用yolopose及yolov8-pose 网络进行人体姿态检测任务时,有时需要标注一些特定场景的中的人型目标数据,用来扩充训练集,提升自己训练模型的效果。因为单纯的人工标注耗时费力&…

No Feign Client for loadBalancing defined. 错误解决

1、原因 在使用Spring Cloud Feign进行服务调用时,如果想要利用Ribbon或Spring Cloud LoadBalancer实现客户端负载均衡,需要确保项目中已经引入了对应的依赖。 从Spring Cloud 2020.0及以上版本开始,Ribbon已被弃用,并推荐使用…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例3-4 CSS 立方体

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>CSS 立方体</title> <link href"CSS/style.css" rel"stylesheet" type"text/css"> <style> .box {width: 200px…

BigDecimal去掉小数位无效0并转换为String

BigDecimal去掉小数位无效0并转换为String //去掉小数位无效0并转换为Stringpublic static String takeOutZero(BigDecimal data) {int point String.valueOf(data).indexOf(".");if(point > 0){String[] split String.valueOf(data).split("");int a…

Spring上下文之support模块MessageSourceAccessor

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

「JavaSE」类和对象1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 类和对象 &#x1f349;类的定义&#x1f34c;类的实例化 &#x1f349;this引用&#x1f349;对象的构造及初始化&#x1f34c;…

【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 懒汉式&#xff08;Lazy Initialization&#xff09;&#xff1a; 双重检查锁定&#xff08;Double-Checked Locking&#xff09;…