文件操作 -- IO [Java EE 初阶]

目录

文件

1. 认识文件

2. 树型结构组织和目录 

3. 文件路径 (Path)

4. 文件系统上存储的文件又可以分为两大类

4.1 文本文件

4.2 二进制文件

文件系统操作 

1.Java 中操作文件

2. File 概述

2.1 属性

 2.2 构造方法

2.3 方法

2.4 部分举例

文件内容操作

1. 数据流(文件流) Stream

2. 文件内容的操作核心步骤:

2.1 打开文件

2.2 关闭文件

2.3 读文件

2.4 写文件

3. Java中是通过一系列类来实现的

3.1 字节流

3.1.1 InputStream

3.1.2 OutputStream

3.2 字符流

3.2.1 Reader

3.2.2 Writer


文件

1. 认识文件

// 在硬盘上存储数据的方式

// 针对硬盘这种持久化存储的 I/O 设备, 当我们想要进行数据保存时, 往往不是保存成一个整体, 而是独立成一个个的单位进行保存, 这的独立的单位就被抽象成文件的概念

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

2. 树型结构组织和目录 

// 随着文件越来越多, 就采用层级结构 (树形结构)对文件进行组织, 这样, 一种专门用来存放管理信息的特殊文件就诞生了, 也就是我们平时说的 文件夹 (folder) 或 目录 (directory) 的概念

3. 文件路径 (Path)

// " \ 或者 / "被称为路径分隔符

// 从树形结构来看, 树中每个节点都可以被一条从根出发, 一直到达该结点的路径所描述, 这种描述方式就被称为文件的绝对路径 (absolute path), 绝对路径相当于是从 "此电脑这里出发", 找到文件的过程

// 除了从根开始进行路径的描述, 我们可以从任意结点出发, 进行路径的描述, 而这种描述方式就被称为相对路径 (relative path), 相对于当前所在结点的一条路径, 相对路径需要有一个 "基准目录" / "工作目录", 表示从这个基准目录出发, 怎么走能找到这个文件(以. 或 .. 出发的, 其中 . 当前目录, .. 表示当前目录的上一层目录)

// 同样一个文件, 站在不同的基准目录上, 查找的路径是不相同的!

4. 文件系统上存储的文件又可以分为两大类

4.1 文本文件

// 存储的是字符 (utf8 就是一个大表, 这个表上的数据组合就可以称为是字符)

4.2 二进制文件

// 存储二进制的数据

// 如何判断是哪一类? 直接使用记事本打开, 如果能看懂, 就是文本文件, 看不懂就是二进制文件

文件系统操作 

1.Java 中操作文件

// 通过 java.io.File 类来对一个文件(包括目录) 进行抽象的描述

// IO input 和 output (我们都是站在 cpu 的角度来描述输入输出的)

// File对象可以对应到一个真实存在的文件, 也可以对应一个不存在的文件

2. File 概述

2.1 属性

修饰符及类型属性

说明

static StringpathSeparator依赖于系统的路径分隔符, String 类型的表示
static charpathSeparator依赖于系统的路径分隔符, char 类型的表示

 2.2 构造方法

签名说明
File(File parent, String child)

根据父目录 + 孩子文件路径,

创建一个新的 File 实例

File(String pathname)

根据文件路径创建一个新的 File 实例,

路径可以是绝对路径或者相对路径

File(String parent, String child)

根据父目录 + 孩子文件路径,

创建一个新的 File 实例, 

父目录用路径表示

2.3 方法

修饰符及返回值类型方法签名说明
StringgetParent()返回File 对象的父目录文件路径
StringgetName()返回File 对象的纯文件名称
StringgetPath()返回File 对象的文件路径
StringgetAbsolutePath()返回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()判断用户是否对文件有可写权限

2.4 部分举例

// 绝对路径

 public static void main(String[] args) throws IOException {File file = new File("d:/test.txt");System.out.println(file.getParent());System.out.println(file.getPath());System.out.println(file.getName());System.out.println(file.getAbsolutePath());System.out.println(file.getCanonicalPath());}

// 相对路径

 public static void main(String[] args) throws IOException {File file = new File("./test.txt");System.out.println(file.getParent());System.out.println(file.getPath());System.out.println(file.getName());System.out.println(file.getAbsolutePath());System.out.println(file.getCanonicalPath());}

 public static void main(String[] args) {File file = new File("./ text.txt");System.out.println(file.exists());System.out.println(file.isFile());System.out.println(file.isDirectory());}

// 创建文件后继续查询

 public static void main(String[] args) throws IOException {File file = new File("./ text.txt");file.createNewFile();System.out.println(file.exists());System.out.println(file.isFile());System.out.println(file.isDirectory());}

// 这样创建文件时可能会抛出异常, 比如当前写入的路径是非法的或者创建文件时, 对于所在目录没有权限操作 

 public static void main(String[] args) throws InterruptedException {File file = new File("./ text.txt");// file.delete(); 这个是立即删除file.deleteOnExit(); // 这个是等退出程序时删除Thread.sleep(5000);}

 

public static void main(String[] args) {File file = new File("./ testDir");file.mkdir();// file.mkdirs();}

// 通过这个创建命令, 我们就可以穿件新的目录, mkdir 只能创建一层目录, mkdirs 可以创建多层

// 文件系统的操作都是基于 File 类来实现的 

文件内容操作

1. 数据流(文件流) Stream

2. 文件内容的操作核心步骤:

2.1 打开文件

2.2 关闭文件

// close 操作非常重要, 用来释放必要的资源, 如果不释放, 就会出现 "文件资源泄露" 很严重的问题

2.3 读文件

 try (Reader reader = new FileReader("d:/test.txt")){while (true) {char buf[] = new char[1024];int n = reader.read(buf);if (n == -1) {// 读到末尾了break;}for (int i = 0; i < n; i++) {System.out.println(buf[i] + " ");}}}
 public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("d:/test.txt")) {while (true) {byte[] buf = new byte[1024];int n = inputStream.read(buf);if (n == -1) {break;}for (int i = 0; i < n; i++) {System.out.println("%x ", buf[i]);}}}

2.4 写文件

public static void main(String[] args) throws IOException {try (Writer writer = new FileWriter("d:/test.txt",true)){writer.write("hello java");}}

// 不加 true 的话, 默认会清空原有内容之后写入, 加上之后就会在原有内容后面继续写入 

3. Java中是通过一系列类来实现的

3.1 字节流

3.1.1 InputStream
 public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("d:/test.txt")) {Scanner scanner = new Scanner(inputStream);String s = scanner.next();System.out.println(s);}}

// Scanner 只是用来读文本文件, 不适合读取二进制文件 

3.1.2 OutputStream

// 使用方法和 write 方法完全一样, 只不过 write 方法不能支持 字符串 参数, 只能按照 字节, 或者 字节数组来写入 

// 后续的一些操作字节的类都是衍生自这两个类

// 是操作字节为单位 (二进制文件)

3.2 字符流

3.2.1 Reader
public static void main(String[] args) throws IOException {// FileReader 构造方法, 可以填写一个文件路径(绝对路径/相对路径都行), 也可以填写一个构造好的 File 对象
//        Reader reader = new FileReader("d:/test.txt");
//        try {
//            // 中间的代码无论如何变化, 最后 close 一定会执行
//        }finally {
//            reader.close();
//        }// 也可以用下面这种更好的方法(try with resources), 来解决问题try (Reader reader = new FileReader("d:/test.txt")){// 这个就完成了打开文件操作}}
3.2.2 Writer
public static void main(String[] args) throws IOException {try (Writer writer = new FileWriter("d:/test.txt",true)){writer.write("hello java");}}

 

// 后续操作字符的类, 衍生自这两个类

// 是操作字符为单位 (文本文件)

// Java IO 流是一个比较庞大的体系, 涉及到非常多的类, 这些不同类, 都有各自不同的特性, 但总的来说, 使用方法都是类似的

// 1) 构造方法, 打开文件

// 2) close 方法, 关闭文件

// 3) 如果衍生自 InputStream 或者 Read, 就可以使用 read 方法来读数据

// 4) 如果衍生自 OutputStream 或者 Writer, 就可以使用 write 方法来写数据了

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

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

相关文章

菜鸟之路Day19一一多线程(一)

菜鸟之路Day19一一多线程&#xff08;一&#xff09; 作者&#xff1a;blue 时间&#xff1a;2025.2.24 文章目录 菜鸟之路Day19一一多线程&#xff08;一&#xff09;o.概述1.什么是多线程2.并发与并行3.多线程的实现方式3.1继承Thread类的方式进行实现3.2实现Runnable接口的…

《Effective Objective-C》阅读笔记(上)

目录 高质量iOS之熟悉OC 了解OC语言的起源 在类的头文件中尽量少引入其他头文件 多用字面语法&#xff0c;少用与之等价的方法 字面数值 字面量数组 字面量字典 局限性 多用类型常量&#xff0c;少用#define预处理指令 用枚举表示状态、选项、状态码 高质量iOS之对象…

mysql --- 相关基础知识整理

目录 一、基本数据结构1、聚簇索引和非聚簇索引1.1 数据存储方式1.2 查询效率1.3 插入和更新性能1.4 适用场景 2、InnoDB 存储引擎2.1 B树2.2 行格式2.3 缓冲池2.4 日志文件 3、MyISAM存储引擎3.1 表文件结构3.2 B树3.3 数据存储特点 4、InnoDB和MyISAM的区别 二、索引1、索引类…

JSX 实现列表渲染

const list [{ id: 1001, name: Vue },{ id: 1002, name: React },{ id: 1003, name: Angular },{ id: 1004, name: Node }, ] function App() {return (<div className"App">this is App{/* 渲染列表 */}<ul>{list.map(item > <li key{item.id}&…

ue5.2.1 quixel brideg显示asset not available in uAsset format

我从未见过如此傻x的bug&#xff0c;在ue5.2.1上通过内置quixel下载资源显示 asset not available in uAsset format 解决办法&#xff1a;将ue更新到最新版本&#xff0c;通过fab进入商场选择资源后add to my library 点击view in launcher打开epic launcher&#xff0c;就可…

Excel大文件拆分

import pandas as pddef split_excel_file(input_file, output_prefix, num_parts10):# 读取Excel文件df pd.read_excel(input_file)# 计算每部分的行数total_rows len(df)rows_per_part total_rows // num_partsremaining_rows total_rows % num_partsstart_row 0for i i…

微信小程序开发TABBAR及第三方接口调用程序

最终样式&#xff1a; 1、在微信小程序管理页面增加第三方调用接口 注意事项&#xff1a;必须是htts安全协议的接口 配置完成后在微信开发工具中可以看到配置的第三方接口URL 2、项目目录文件结构 3、程序代码 app.json {"pages": ["pages/home/home",&…

git -学习笔记

目录 基本操作语法 设置用户和邮箱 版本回退 工作区和暂存区 撤销修改 删除与恢复 一工作区删除了&#xff0c;但是暂存区没删除 二工作区误删了&#xff0c;暂存区还有 github-Git 连接 报错解决-push远程仓库被拒绝 远程库 分支 分支冲突 储藏分支 回到当前分…

谷云科技iPaaS×DeepSeek:构建企业智能集成的核心底座

2025年&#xff0c;DeepSeek大模型的爆发式普及&#xff0c;正引领软件行业实现 “智能跃迁”。从代码生成到系统集成&#xff0c;从企业级应用到消费级产品&#xff0c;自然语言交互能力已成为新一代软件的核心竞争力。据行业分析&#xff0c;超60%的软件企业已启动大模型适配…

UE Python笔记

插件 官方 商城 Python Editorhttps://www.fab.com/listings/f4c99ba0-1a86-4f6a-b19d-2fd13f15961b GitHUB 好像只更新到了2020年4.2x的版本。可能有大佬改了5.x的版本。也希望分享给我一份。谢谢 https://github.com/20tab/UnrealEnginePython 学习笔记 网上教程一大堆。…

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…

【C语言】第八期——指针、二维数组与字符串

目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算&#xff08;了解&#xff09; 6.2.1 指针加减具体数字…

Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境

文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统&#xff…

C++蓝桥杯基础篇(六)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来一起学习蓝桥杯基础篇&#xff08;六&#xff09;&#xff0c;练习相关的数组习题&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 数组的左方区域 这道题&#xff0c;实质上是找规律&#xff0c;…

计算机毕业设计Python+DeepSeek-R1大模型期货价格预测分析 期货价格数据分析可视化预测系 统 量化交易大数据 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果&#xff0c;这样比较麻烦&#xff0c;那么很多软件都提供了实时预览的功能&#xff0c;我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …

可以免费无限次下载PPT的网站

前言 最近发现了一个超实用的网站&#xff0c;想分享给大家。 在学习和工作的过程中&#xff0c;想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量&#xff0c;但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制&#xff0…

九、数据治理架构流程

一、总体结构 《数据治理架构流程图》&#xff08;Data Governance Architecture Flowchart&#xff09; 水平结构&#xff1a;流程图采用水平组织&#xff0c;显示从数据源到数据应用的进程。 垂直结构&#xff1a;每个水平部分进一步划分为垂直列&#xff0c;代表数据治理的…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法&#xff1a;ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法&#xff1a;reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

SpringBoot集成easy-captcha图片验证码框架

SpringBoot集成easy-captcha图片验证码框架 此项目已经很久未维护&#xff0c;如有更好的选择&#xff0c;建议使用更好的选择!!! 一、引言 验证码&#xff08;CAPTCHA&#xff09;是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而&#xff0c;从零开发验证码…