【Java EE】文件操作

目录

1.认识文件

2.树型结构组织和目录

3.文件路径(Path)

4.其他知识

5.Java中操作文件

5.1File概述

5.1.1属性

5.1.2构造方法

5.1.3方法

5.2代码示例


1.认识文件

我们先来认识狭义的文件(file)。针对1硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似与办公桌上一份份真实的文件一般。

文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息。

2.树型结构组织和目录

同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,就是按照层级结构进行组织——也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹或者目录的概念。

3.文件路径(Path)

如何在文件系统中如何定位我们的唯一的文件是要解决的问题。因为从树形结构的角度来看,树中的每个结点都可以被一条从跟开始,一直到达的结点的路径所描述,而这种描述方式就被称为文件的绝对路径。

除了可以从根开始进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式就被称为相对路径,相当于当前所在结点的一条路径。

4.其他知识

即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按标准格式保存的非被字符集编码过的文件。

Windows操作系统上,会按照文件名中的后缀来确定文件类型以及该类型文件的默认打开程序。但这个习俗并不是通用的,在OSX,Unix,Linux等操作系统上,就没有这样的习惯,一般不对文件类型做如此精准的分类。

文件由于被操作系统进行了管理,所以会根据不同的用户,回赋予用户不同的对待该文件的权限,一般的可以认为有可读、可写、可执行文件。

Windows操作系统上,还有一类文件比较特殊,就是我们平时看到的快捷操作,这种文件只是对真实文件的一种引用而已。其他操作系统上也有类似的概念,例如,软链接等。

最后,很多操作系统为了实现接口的统一性,将所有的I/O设备都抽象了文件的概念,使用这一概念最为知名的就是Unix、Linux操作系统——万物皆文件。

5.Java中操作文件

Java中通过java.io.File类来对一个文件(包括目录)进行抽象的描述。注意,有File对象,并不代表真实存在该文件。

5.1File概述
5.1.1属性
修饰符及类型属性说明
static String pathSeparator依赖于系统的路径分隔符,String类型的表示

Static char

pathSeparator依赖于系统的路径分隔符,char类型的表示
5.1.2构造方法
签名说明
File(File parent,String child)根据父目录+孩子文件路径,创建一个新的File实例
File(String parhname)根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径
File(String parent,String child)根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示
5.1.3方法
修饰符及返回值类型方法签名说明
StringgetParent()返回File对象的父目录文件路径
StringgetName()返回File对象的纯文件名称
StringgetPath()返回File对象的文件路径
StringgetAbsoliutePath()返回File对象的绝对路径
StringgetCanonicalPath()返回File对象的修饰过的绝对路径
booleanexists()判断File对象描述的文件是否真实存在
booleanisDirectory()判断File对象代表的文件是否是一个目录
booleanisFile()判断File对象代表的文件是否是一个普通文件
booleancreateNewFile()根据File对象,自创建一个空文件。成功创建后返回true
booleandelete()根据File对象,删除该文件。成功删除后返回true
voiddeleteOnExit()根据File对象,标注文件将被删除,删除动作会加到JVM运行结束时才会进行
String[]list()返回File对象代表的目录下的所有文件名
File[]listFiles()返回File对象代表的目录下的所有文件,以File对象表示
booleanmkdir()创建File对象代表的目录
booleanmkdirs()创建File对象代表的目录,如果必要,会创建中间目录
booleanrenameTo(File dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限
5.2代码示例

示例1

观察get系列的特点与差异

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File file = new File("..\\hello-world.txt"); // 并不要求该⽂件真实存
 System.out.println(file.getParent());
System.out.println(file.getName());
 System.out.println(file.getPath());
 System.out.println(file.getAbsolutePath());
 System.out.println(file.getCanonicalPath());
 }
}

运行结果

hello-world.txt
..\hello-world.txt
D:\代码练习\⽂件⽰例1\..\hello-world.txt
D:\代码练习\hello-world.txt

示例2

普通文件的创建、删除

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File file = new File("hello-world.txt"); // 要求该⽂件不存在,才能看
 System.out.println(file.exists());
 System.out.println(file.isDirectory());
 System.out.println(file.isFile());
 System.out.println(file.createNewFile());
 System.out.println(file.exists());
 System.out.println(file.isDirectory());
 System.out.println(file.isFile());
 System.out.println(file.createNewFile());
 }
}

运行结果

//false
//false
//false
//true
//true
//false
//true
//false
//false

示例3

普通文件的删除

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File file = new File("some-file.txt"); // 要求该⽂件不存在,才能看到相
 System.out.println(file.exists());
 System.out.println(file.createNewFile());
 System.out.println(file.exists());
 System.out.println(file.delete());
 System.out.println(file.exists());
 }
}

运行结果

//false true true true true false

示例4

观察deleteOnExit的现象

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File file = new File("some-file.txt"); // 要求该⽂件不存在,才能看到相
 System.out.println(file.exists());
System.out.println(file.createNewFile());
 System.out.println(file.exists());
 file.deleteOnExit();
 System.out.println(file.exists());
 }
}

运行结果

//false true true true true

程序运行结束后,文件还是被删除了

示例5

观察目录的创建

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File dir = new File("some-dir"); // 要求该⽬录不存在,才能看到相同的现
 System.out.println(dir.isDirectory());
 System.out.println(dir.isFile());
 System.out.println(dir.mkdir());
 System.out.println(dir.isDirectory());
 System.out.println(dir.isFile());
 }
}

运行结果

//false false true true false

示例6

观察目录创建2

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File dir = new File("some-parent\\some-dir"); // some-parent 和 so
 System.out.println(dir.isDirectory());
 System.out.println(dir.isFile());
 System.out.println(dir.mkdir());
 System.out.println(dir.isDirectory());
 System.out.println(dir.isFile());
 }
}

运行结果

//false false false false false

mkdir()的时候,如果中间目录不存在,则无法创建成功;mkdir就可以解决这个问题。

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File dir = new File("some-parent\\some-dir"); // some-parent 和 so
 System.out.println(dir.isDirectory());
 System.out.println(dir.isFile());
 System.out.println(dir.mkdirs());
 System.out.println(dir.isDirectory());
 System.out.println(dir.isFile());
 }
}

运行结果

//false false true true false

示例7

观察文件重命名

import java.io.File;
import java.io.IOException;
public class Main {
 public static void main(String[] args) throws IOException {
 File file = new File("some-file.txt"); // 要求 some-file.txt 得存在
 File dest = new File("dest.txt"); // 要求 dest.txt 不存在
 System.out.println(file.exists());
 System.out.println(dest.exists());
 System.out.println(file.renameTo(dest));
 System.out.println(file.exists());
 System.out.println(dest.exists());
 }
}

运行结果

// true false true false true

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML重要标签梳理学习

1、HTML文件的框架 使用VS Code编码时&#xff0c;输入!选中第一个&#xff01;就可以快速生成一个HTML文件框架。 2、标签 <hr> <!--下划线--> <br> <!--换行--> <strong>加粗</strong> &…

MySQL行级锁——技术深度+1

引言 本文是对MySQL行级锁的学习&#xff0c;MySQL一直停留在会用的阶段&#xff0c;需要弄清楚锁和事务的原理并DEBUG查看。 PS:本文涉及到的表结构均可从https://github.com/WeiXiao-Hyy/blog中获取&#xff0c;欢迎Star&#xff01; MySQL行级锁 行级锁&#xff08;Row-…

案例研究 | JumpServer助力天虹股份构建可靠的运维安全审计平台

天虹数科商业股份有限公司&#xff08;以下简称为“天虹股份”&#xff09;成立于1984年&#xff0c;是国有控股的上市公司。通过人本、科学的管理&#xff0c;以及专业、高效的运营&#xff0c;天虹股份连续多年入围中国连锁百强企业&#xff0c;拥有全国领先的零售技术研发和…

vue3 项目启动时vite版本问题报错

背景&#xff1a; 我是在项目迁移过程中遇到的这个问题&#xff0c;前提可以看下面这篇 http://t.csdnimg.cn/g70Eq 问题描述 迁移项目时&#xff0c;将项目整体升级到了vue3版本&#xff0c;启动项目时出现下列报错&#xff1a; npm ERR! Found: vite5.1.4 npm ERR! node_…

2024-2.基础操作-Python

Jupiter基本使用 cell有两种模式&#xff1a; codemarkdown 快捷键 新建cell&#xff1a;a,b删除cell&#xff1a;dd&#xff0c;x运行cell&#xff1a;shiftenter切换cell模式&#xff1a; m&#xff1a;将code模式的cell切换到mdy:将md模式的cell切换到code 智能补全&#x…

QT Webengine开发过程报错qml: Render process exited with code 159 (killed)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、解决方法二、补充说明总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 基于QT的Webengine开发过程中&#xff0c;QT的官方示例…

【算法】反转链表

本题来源---《反转链表》 题目描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输…

22长安杯电子取证复现(检材一,二)

检材一 先用VC容器挂载&#xff0c;拿到完整的检材 从检材一入手&#xff0c;火眼创建案件&#xff0c;打开检材一 1.检材1的SHA256值为 计算SHA256值&#xff0c;直接用火眼计算哈希计算 9E48BB2CAE5C1D93BAF572E3646D2ECD26080B70413DC7DC4131F88289F49E34 2.分析检材1&am…

50.HarmonyOS鸿蒙系统 App(ArkUI)web组件实现简易浏览器

50.HarmonyOS鸿蒙系统 App(ArkUI)web组件实现简易浏览器 配置网络访问权限&#xff1a; 跳转任务&#xff1a; Button(转到).onClick(() > {try {// 点击按钮时&#xff0c;通过loadUrl&#xff0c;跳转到www.example1.comthis.webviewController.loadUrl(this.get_url);} …

Root mapping definition has unsupported parameters: [all : {analyzer=ik_max_wor

你们好&#xff0c;我是金金金。 场景 我正在使用Springboot整合elasticsearch&#xff0c;在创建索引(分词器) 运行报错&#xff0c;如下 排查 排查之前我先贴一下代码 import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; // 注意这个包SpringBootTe…

Linux中如何安装ImageMagick及其常规使用命令

在Linux中安装ImageMagick可以通过包管理工具进行安装。具体步骤如下&#xff1a; 打开终端&#xff08;Terminal&#xff09;。 使用以下命令更新系统软件包列表&#xff1a; sudo apt update使用以下命令安装ImageMagick&#xff1a; sudo apt install imagemagick安装完…

物理机安装centos7并配置基本环境,网络配置,docker配置

1.首先下载镜像Download 2.下载UltraISO 安装docker 第1步&#xff1a;卸载当前版本docker yum erase docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \do…

[生活][杂项] 如何正确打开编织袋

编织袋打开的正确姿势 面对单线分离右边的线头&#xff0c;然后依次拉开即可

YAML教程-1-基础入门

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go YAML简介 YAML&#xff08;YAML Aint Markup Language&#xff09;是一种用于数据序列化的人类可读格式。它广泛用于配置文件、数据交换、持续集成/持续部署&#xff08;CI/CD&#xff09;等领域。YAML的设计目标…

注意,把Python库安装在一个环境里,可能会“非常危险”!

如果说谁写Python不用第三方库&#xff0c;我敬他是条汉子。如今到处是轮子的时代&#xff0c;Python第三方库管理成了开发者们头疼的问题。 可能在看这篇文章的很多人&#xff0c;都没用过Python虚拟环境&#xff0c;不知道安装Python库需要考虑版本兼容问题。 那么把所有要…

基于SpringBoot的健身房管理系统

一.前言 本系统用了 Sping Data JPA 这一不常用的数据库框架&#xff0c;是一个值得学习研究的点。 本项目用户名&#xff1a;admin 密码: admin123 方可进入。项目源码在文章开头&#xff0c;下载到本地导入IDEA&#xff0c;修改配置文件中数据库连接信息后&#xff0c;导入项…

字段名称导致mybatisplus自带方法报错.BadSqlGrammarException: ### Error querying database. C

今天在建一个数据表之后&#xff0c;在springboot中使用了mybatisplus代码生成工具生成了java相关代码&#xff0c;在查询的时候&#xff0c;使用的是list()方法查询&#xff0c;发现居然会报错&#xff0c;找了好久。 org.springframework.jdbc.BadSqlGrammarException: ###…

锁策略和死锁问题

锁策略 乐观锁 vs 悲观锁重量级锁 vs 轻量级锁自旋锁 vs 挂起等待锁读写锁 vs 互斥锁公平锁 vs 非公平锁可重入锁 vs 不可重入锁死锁死锁产生的必要条件如何简单的解决死锁问题 小结 这里不是描述的某个特定锁,而是描述的锁的特性,描述的是"一类锁". 乐观锁 vs 悲观…

人到中年三两事儿

人到中年&#xff0c;常常伴随着一系列的焦虑和烦恼。这些焦虑可能源自对工作的不确定性、对未来的担忧、对家庭责任的增加&#xff0c;或是对个人成就的反思。在这个年纪&#xff0c;我们可能会发现自己站在人生的十字路口&#xff0c;面临着重要的选择和决策。 首先&#xff…

数智时代的AI人才粮仓模型解读白皮书(2024版)

来源&#xff1a;极客邦 自 2023 年上半年起&#xff0c;ChatGPT 等大模型技术蓬勃发展&#xff0c;AI 技术不断突破边界&#xff0c;展现 出惊人的潜力和发展速度。从早期的逻辑推理、专家系统&#xff0c;到如今的深度学习、神经网络&#xff0c; AI 技术显著缩小了科学与实…