【JavaSE】文件基础与File类

在日常开发中,我们几乎每天都在和“文件”打交道:读取配置文件、写日志、上传下载文件……
但很多时候,我们对“文件”的理解其实是比较模糊的,这篇文章我们将从文件的基本概念出发,重新了解一下文件~

1. 文件基础

1.1 文件与路径的基本概念

在实际开发中,我们经常需要和文件打交道,比如读取配置文件、写日志、上传下载文件等。因此,在学习 Java IO 之前,有必要先对“文件”本身有一个基本认识。

通常我们说的文件,是指保存在硬盘上的数据。需要注意的是,程序并不能直接操作硬盘这样的硬件资源,而是通过操作系统提供的“文件”这一抽象概念,间接完成对磁盘数据的读写。

1.2 路径的表示方式

为了在磁盘上定位某一个文件,操作系统引入了目录的概念

多个目录相互嵌套,最终形成一棵树形结构,从根目录出发,经过若干级目录,最终定位到目标文件。

这一整条“查找路径”,就是我们所说的文件路径

路径中一般使用/作为目录分隔符:

  • Linux / macOS 使用/
  • Windows 默认使用\,但同样支持/

在实际开发中,通常统一使用/,可以减少跨平台时的兼容问题。

1.3 绝对路径与相对路径

路径又可以分为两类:

绝对路径

从根目录(或盘符)开始,一直描述到目标文件的位置,例如:

C:/Users/xxx/Desktop/test.txt

绝对路径定位明确,但灵活性较差。

相对路径

相对于某一个基准目录来表示路径,例如:

./test.txt

其中:

  • .表示当前目录
  • ..表示当前目录的上一层

需要注意的是,相对路径必须依赖基准目录
在 Java 程序中,这个基准目录通常是 JVM 的工作目录,因此同一段代码在不同运行环境下,可能会出现“本地能跑,服务器找不到文件”的情况。

1.4 文件的类型

从开发角度来看,通常将文件分为两类:

  • 文本文件:内容可以按字符语义进行解析,例如.txt.java.xml
  • 二进制文件:内容按字节存储,需要特定程序解释,例如图片、音频、视频

二者的区别不在于“有没有意义”,而在于是否按照字符来理解文件内容

1.5 重命名与移动的本质

renameTo方法既可以用于重命名文件,也可以用于移动文件。

在操作系统层面,这两种操作的本质是一样的:
修改文件在目录树中的位置映射

  • 如果在同一磁盘内移动,开销很小,速度很快
  • 如果跨磁盘移动,则会退化为“复制 + 删除”,性能明显下降

这一点在处理大文件时尤为明显

2. File 类

Java 提供了java.io.File类,用于操作文件系统

需要强调的是:

File 类并不负责文件内容的读写

它的主要作用包括:

  • 判断文件或目录是否存在
  • 创建、删除文件
  • 创建目录
  • 重命名或移动文件

真正的文件读写,需要通过输入流、输出流来完成

有了文件,接下来我们来介绍一下IO~

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

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

相关文章

SpringBoot+Vue “衣依”服装销售平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着互联网技术的快速发展,电子商务平台已成为现代商业的重要组成部分。服装行业作为传统零售业的代表,亟需通过数字化转型提升竞争力。“衣依”服装销售平台基于SpringBoot和Vue技术栈开发,旨在为用户提供便捷的在线购物体验。该平台整…

Thinkphp的农贸市场摊位 夜市摊位租赁系统设计与实现

目录摘要关键词项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 农贸市场与夜市摊位租赁系统基于ThinkPHP框架开发,旨在解决传统摊位管理中效率低、信息不透明等问题。系统采用B/S架构,结合MySQL数据库,实现…

Claude Code 永动机:ralph-loop 无限循环迭代插件详解(安装 / 原理 / 最佳实践 / 避坑)

Claude Code 永动机:ralph-loop 无限循环迭代插件详解(安装 / 原理 / 最佳实践 / 避坑) Claude Code 插件 ralph-loop 全解析:Stop Hook 无限迭代、completion-promise 退出条件与最佳实践ralph-loop 使用指南:让 Cla…

Java SpringBoot+Vue3+MyBatis 学科竞赛管理系统源码|前后端分离+MySQL数据库

摘要 随着信息技术的快速发展,学科竞赛作为高校人才培养的重要环节,其管理效率与信息化水平直接影响竞赛的公平性和参与度。传统的学科竞赛管理多依赖人工操作,存在报名流程繁琐、数据统计滞后、信息共享困难等问题。为解决这些问题&#xff…

Thinkphp的吉他谱分享平台的设计与实现

目录研究背景与意义系统设计目标技术实现要点创新与特色应用价值项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理研究背景与意义 随着音乐爱好者的增多,吉他谱共享需求日益增长。传统分享方式效率低、资源分散,亟需一个专业…

Java SpringBoot+Vue3+MyBatis 墙绘产品展示交易平台系统源码|前后端分离+MySQL数据库

摘要 随着数字化技术的快速发展,传统墙绘行业逐渐向线上平台转型,以满足消费者对个性化艺术品的需求。墙绘作为一种独特的装饰艺术形式,具有高度的定制化和艺术价值,但在传统交易模式下,供需双方的信息不对称问题显著&…

Thinkphp的基于协同过滤算法的动漫推荐系统

目录基于协同过滤算法的动漫推荐系统(ThinkPHP实现)项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理基于协同过滤算法的动漫推荐系统(ThinkPHP实现) 该系统采用ThinkPHP框架结合协同过滤算法&#x…

前后端分离IT交流和分享平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着互联网技术的快速发展,传统的前后端耦合架构逐渐暴露出开发效率低、维护成本高、扩展性差等问题。前后端分离架构因其模块化、灵活性高和协作效率高等优势,成为现代Web开发的主流模式。在此背景下,设计并实现一个基于前后端分离的IT…

SpringBoot + Aviator + 规则中心:轻量级表达式引擎实现营销优惠动态计算

电商大促活动时,营销规则复杂多变,今天满300减50,明天买2送1,后天又变成阶梯式折扣?每次改规则都得改代码、重新发布,简直是开发人员的噩梦!今天就来聊聊如何用SpringBoot Aviator表达式引擎&a…

Thinkphp的基于协同过滤算法的音乐推荐系统

目录基于协同过滤算法的音乐推荐系统(ThinkPHP实现)项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理基于协同过滤算法的音乐推荐系统(ThinkPHP实现) 音乐推荐系统通过分析用户行为数据,挖…

前后端分离ONLY在线商城系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着电子商务的快速发展…

前后端分离“衣依”服装销售平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着电子商务的快速发展,服装销售行业对高效、灵活的管理系统需求日益增长。传统的单机版或前后端耦合的系统架构已难以满足现代企业对快速迭代、高并发访问及跨平台兼容性的需求。服装销售平台需要具备商品管理、订单处理、用户交互等功能,同时还需…

解析HTML表格嵌套问题

在处理HTML表格转换为CSV的过程中,我遇到了一个有趣的问题。让我们来详细探讨一下这个问题,并提供解决方案。 问题背景 假设我们有一个HTML字符串,包含多个表格: <table> <tr><td>A</td>

SpringBoot+Vue 海滨体育馆管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着体育产业的快速发展&#xff0c;体育馆的管理需求日益复杂化&#xff0c;传统的人工管理模式已无法满足现代化场馆的高效运营需求。海滨体育馆作为一个综合性体育场馆&#xff0c;涉及场地预约、会员管理、设备维护等多方面业务&#xff0c;亟需一套智能化管理系统以提…

探索 qCumber 单元测试框架

在编程领域,单元测试是确保代码质量和可靠性的重要环节。qCumber 是 kdb+/q 语言的一个单元测试框架,专门用于测试 q 脚本。本文将深入探讨如何使用 qCumber 框架进行单元测试,并通过一个具体的实例来展示其应用。 qCumber 简介 qCumber 是一个轻量级的测试框架,适用于 k…

SpringBoot+Vue 墙绘产品展示交易平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着城市化进程的加快和艺术文化的普及&#xff0c;墙绘艺术逐渐成为城市美化的重要组成部分&#xff0c;同时也催生了墙绘产品展示与交易的市场需求。传统的墙绘交易模式依赖线下渠道&#xff0c;存在信息不对称、交易效率低等问题。为了解决这些问题&#xff0c;本研究设…

Java Web 网上租赁系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的快速发展&#xff0c;传统租赁行业正逐步向数字化、智能化转型。网上租赁系统作为一种新型的商业模式&#xff0c;能够有效降低租赁双方的信息不对称问题&#xff0c;提高资源利用率&#xff0c;同时为用户提供便捷的在线租赁服务。该系统通过整合租赁资源…

基于SpringBoot+Vue的Web足球青训俱乐部管理后台系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 足球青训俱乐部作为培养青少年足球人才的重要机构&#xff0c;其管理效率直接影响训练质量和学员发展。传统的人工管理方式存在信息记录不准确、数据更新滞后、资源调配效率低等问题&#xff0c;亟需一套信息化管理系统实现规范化运营。随着互联网技术的普及&#xff0c;基…

Java SpringBoot+Vue3+MyBatis 师生健康信息管理系统系统源码|前后端分离+MySQL数据库

摘要 随着信息化技术的快速发展&#xff0c;校园健康管理逐渐成为教育领域的重要课题。传统的师生健康信息管理多依赖纸质记录或分散的电子表格&#xff0c;存在数据易丢失、更新不及时、统计效率低下等问题。尤其是在新冠疫情期间&#xff0c;健康信息的实时监控和高效管理显得…

二叉树高频题目

来自左神讲解&#xff0c;观看b站更精彩。1.二叉树层序遍历解法一#include <iostream> #include <queue> #include <unordered_map>using namespace std;class LevelOrderTraversal { private:struct TreeNode {int val;TreeNode *left, *right;TreeNode() :…