javaEE->IO:
文件:
操作系统中会把很多 硬件设备 和 软件资源 抽象成“文件”,统一进行管理。
大部分谈到的文件,都是指 硬盘的文件,文件就相当于是针对“硬盘”数据的一种抽象
硬盘:
1.机械硬盘:便宜
2.固态硬盘:比机械硬盘效率高(类似于内存,cpu)
现在电脑基本都是固态硬盘,想存储更多资料就可以额外添加机械硬盘。
机械硬盘不可拆开!!!会沾满灰尘,撞坏磁头。
机械硬盘适合顺序读写,,不适合随机读写。
在服务器开发中,涉及到硬盘有机械,也有固态。在一些用来存储大规模的机器中,仍然以机械硬盘为主。
内存 VS 硬盘
1.内存速度快,硬盘速度慢
2.内存空间小,硬盘空间大
3.内存贵,硬盘便宜
4.内存数据,断电丢失;硬盘数据,断电存在
以文件的方式操作硬盘
计算机上的文件通过“文件系统”(操作系统提供的模块)来进行组织。
操作系统使用 “目录”这样的结构来组织文件 ----->树形结构
通过目录这样的层次结构,描述文件所在位置--->路径“path”
路径:
1.绝对路径:以C: D: 盘符开头的
2.相对路径:需要先指定一个目录,作为基准目录 ,从基准目录出发,看看沿着那些路线能找到指定文件。往往以 . (当前目录,可省略)或者 .. (当前目录的上一级目录)开头
如果进行命令行操作,基准目录就是当前所处的目录:
如果是图形化界面,基准目录不好说,对于idea来说,基准目录就是项目目录:
文件的类型:
1.文本:文件中保存的数据,都是字符串,保存内容都是合法字符
2.二进制:文件中保存的数据,仅仅是二进制字符,不要求保存的内容是合法字符
合法字符:字符集/字符编码
Eg:
Utf8
有一个表格列出了什么字符对应什么编码
如果文件是utf8编码,文件中的每个数据都是合法的utf8编码的字符,就可以认为是文本文件。
如果存在一些不是utf8合法字符的情况,就是二进制文件。
计算机本身存储的数据都是二进制
如何判定一个文件是文本文件还是二进制文件?
把这个文件放入到记事本中,看是否出现乱码。
无乱码则是文本文件,有乱码则是二进制文件。
(记事本尝试按照字符的方式来展示内容,这个过程会自动查码表)
写代码时,文本文件和二进制文件,代码编写方式不同。
docx、pptx都都属于二进制
文本文件
Java对于文件操作的api
1.针对文件系统进行操作(右键目录)
:创建文件、删除文件、重命名文件。。。
2.针对文件内容的操作:流对象
:读文件/写文件
Java针对文件系统的操作,使用File类进行操作。
这个类所在的包, 叫java.io。
IO:Input->输入
Ouput->输出
输入和输出:
pathSeparator:在一个路径中用来分隔目录的符号,开发中建议用 “/”
文件名=前缀+扩展名
使用路径构造File对象时,要把前缀和扩展名都加上。
文件都有权限
删除
package Io;import java.io.File;public class Demo3{public static void main(String[] args) throws InterruptedException {File file = new File("d:/test.txt");
// boolean ret = file.delete();//删除文件
// System.out.println("ret = " + ret);file.deleteOnExit();//退出之后再删除Thread.sleep(5000);//5s之后System.out.println("进程结束!");}
}
打印指定路径下的文件和目录
package Io;import java.io.File;
import java.util.Arrays;public class Demo4{public static void main(String[] args) {File file = new File("d:/");String[] list = file.list();System.out.println(Arrays.toString(list));}
}
创建目录
package Io;import java.io.File;public class Demo5 {public static void main(String[] args) {File file = new File("d:/java学习/aaa/bbb/ccc");
// boolean ret = file.mkdir();//创建file对象代表下的目录boolean ret = file.mkdirs();//创建file对象代表下的多级目录System.out.println("ret = " + ret);}
}
重命名
package Io;import java.io.File;public class Demo6 {public static void main(String[] args) {File srcfile = new File("D:/test.txt");File destfile = new File("D:/test2.txt");boolean ret = srcfile.renameTo(destfile);//重命名System.out.println("ret = "+ret);}
}
流对象:对文件内容操作
标准库中,提供读写文件的流对象,有多个类。大体分为两个类别:
1.字节流(对应着二进制文件):每次读/写的最小单位,都是“字节”。
代表类:
--》InputStream 输入
--》OutputStream 输出
2.字符流(对应着文本文件):每次读/写的最小单位,都是“字符”。
一个字符可能对应多个字节 --> 看当前的字符集
GBK -> 一个中文字符 =》两个字节
UTF8 ->一个中文字符 =》三个字节
(字符流是对字节流进行的又一层封装。能帮我们把文件中几个相邻的字节,转换成一个字符。帮我们完成一个自动查字符集表)
代表类:
--》Reader
--》Writer
字符流:
Reader
package Io;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Demo7 {public static void main(String[] args) throws IOException {//文件不存在会抛异常,原本FileReader会抛一个FileNotFoundException,read会抛一个IOException,由于FileNotFoundException是IOException的子类
// Reader reader = new Reader("d:/test.txt");//Reader是抽象类,不能new实例,只能new子类
// Reader reader = new FileReader("d:/test.txt");//创建reader的过程就是打开文件的过程//1.一次read一个字符
// while(true) {
// int c = reader.read();//由于read方法可能会返回一个-1,char表示不了,所以用int
// if(c == -1) break;
// char ch = (char)c;
// System.out.println(ch);
// }// //2.一次read多个字符
// while(true) {//加while的原因是文件太大,数组长度不够,一次不能将文件读完,多次循环才可
// char[] cbuf = new char[1024];//创建一个字符数组
// int n = reader.read(cbuf);//n表示当前读到的字符的个数
// if(n == -1 ) {//文件为空
// break;
// }
// System.out.println("n = " + n);
// for (int i = 0; i < n; i++) {
// System.out.println(cbuf[i]);
// }
// }//3.文件用完得close
// try {
// while(true) {
// char[] cbuf = new char[2];
// int n = reader.read(cbuf);
// if(n == -1) {
// break;
// }
// System.out.println("n = " + n);
// for (int i = 0; i < n; i++) {
// System.out.println(cbuf[i]);
// }
// }
// }finally {
// reader.close();
// }//try with resources:括号里的reader会在try代码块结束的时候(无论是正常结束还是抛异常),都会自动调用其中的close方法try(Reader reader = new FileReader("d:/test.txt")) {while(true) {char[] cbuf = new char[2];int n = reader.read(cbuf);if(n == -1) {break;}System.out.println("n = " + n);for (int i = 0; i < n; i++) {System.out.println(cbuf[i]);}}}}
}
输出型参数:
释放资源:
方法一:
方法二:
方法三:
Writer
字节流:
InputStream
OutputStream
如果已知字节流对象 实际的数据 是文本数据,可以通过以下的方法将 字节流 转换成 字符流
面试题:
//扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件。
package Io;import java.io.File;
import java.util.Scanner;public class Demo13 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//1.先让用户输入一个要扫描的目录System.out.println("请输入要扫描的路径:");String path = scanner.nextLine();File rootPath = new File(path);if(!rootPath.isDirectory()) {//如果此时不是目录// 对用户输入的内容一定要进行合法性验证!!!!!System.out.println("您输入的路径有误!!!");return;}//2.让用户再输入一个查询的关键词System.out.println("请输入要删除文件的关键词:");String word = scanner.nextLine();//3.进行递归扫描scanDir(rootPath,word);}private static void scanDir(File rootPath, String word) {//1.先列出路径中 所有的文件和目录File[] files = rootPath.listFiles();if(files == null) {//当前目录为空,直接返回return;}//2.遍历这里的每个元素,针对不同类型做出处理for(File file : files) {//加个日志,方便观察当前文件递归的执行过程System.out.println("当前扫描的文件:" + file.getAbsolutePath());if(file.isFile()) {//普通文件,检查文件是否需要删除,并执行是删除操作checkDelete(file,word);}else {scanDir(file,word);}}}private static void checkDelete(File file, String word) {if(!file.getName().contains(word)) {//不含关键词return;}//需要删除的System.out.println("当前文件为: " + file.getAbsolutePath() + ", 确定要删除(Y/N): ");Scanner scanner = new Scanner(System.in);String choice = scanner.nextLine();if(choice.equals("Y") || choice.equals("y")) {//真正删除file.delete();System.out.println("删除完毕!");}else {//输入其他值都会取消删除操作System.out.println("取消删除!");}}
}
相关文章:

javaEE->IO:
文件: 操作系统中会把很多 硬件设备 和 软件资源 抽象成“文件”,统一进行管理。 大部分谈到的文件,都是指 硬盘的文件,文件就相当于是针对“硬盘”数据的一种抽象 硬盘: 1.机械硬盘:便宜 2.固态硬盘&…...

Oracle 用户/权限/角色管理
1. 用户 1.1. 用户的创建和删除 1.1.1. 创建用户 create user user identified {by password | externally} [ default tablespace tablespace ] [ temporary tablespace tablespace ] [ quota {integer [k | m ] | unlimited } on tablespace [ quota {integer [k | m ] | …...
使用免费wordpress成品网站模板需要注意点什么
在使用免费 WordPress 成品网站模板时,需要从版权、安全性、兼容性、功能限制等多个方面谨慎考量,避免后续出现问题。以下是具体需要注意的要点: 一、版权与授权问题 明确授权类型 免费模板可能分为「开源免费」「限个人使用」「禁止商业用…...
深入理解 JSX:React 的核心语法
1. 什么是 JSX? JSX(JavaScript And XML)是 React 中最核心的概念之一,也是区别于 Vue 的一个重要特征(尽管 Vue 现在也支持 JSX 语法)。JSX 是一种在 JavaScript 中编写 HTML 代码片段的语法协议…...

工厂方法模式深度解析:从原理到应用实战
作者简介 我是摘星,一名全栈开发者,专注 Java后端开发、AI工程化 与 云计算架构 领域,擅长Python技术栈。热衷于探索前沿技术,包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践,乐于分享实战经验与…...
TS 星际通信指南:从 TCP 到 UDP 的宇宙漫游
文章目录 一、计算机网络通信1、基本概念2、核心要素(一)终端设备(二)通信介质(三)网络协议 3、常用通信模型(一)OSI 七层模型(理论框架)(二&…...

python可视化:端午假期旅游火爆原因分析
python可视化:端午假期旅游火爆原因分析 2025年的旅游市场表现强劲: 2025年端午假期全社会跨区域人员流动量累计6.57亿人次,日均2.19亿人次,同比增长3.0%。入境游订单同比大涨近90%,门票交易额(GMV&#…...
Missashe考研日记—Day51-Day57
Missashe考研日记—Day51-Day57 写在面前 本系列博客用于记录博主一周的学习进度。线代题型总结 专业课408 这周简直是拼命学计网,花了两三天速通传输层和应用层内容,又臭又长的网课听不下去一点了,赶紧结束准备开二轮进行复习和刷题了。…...
electron-vite_18桌面共享
electron默认不支持桌面共享,需要添加desktopCapturer配置,这样在使用navigator.mediaDevices.getUserMedia API访问可用于从桌面捕获音频和视频的媒体源的信息。 electron版本 "electron": "^31.0.2",在main.js中添加desktopCaptu…...

SOC-ESP32S3部分:28-BLE低功耗蓝牙
飞书文档https://x509p6c8to.feishu.cn/wiki/CHcowZMLtiinuBkRhExcZN7Ynmc 蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换,下图是一个蓝牙应用的分层架构,Application部分则是我们需要实现的内容,Protoc…...

Git-flow流
Git git是版本控制软件,一般用来做代码版本控制 github是一个免费版本控制仓库是国内外很多开源项目的集中地,其本体是一个git服务器 Git初始化操作 git init 初始化仓库 git status 查看当前仓库的状态 git add . 将改动的文件加到暂存区 gi…...

VirtualBox给Rock Linux9.x配置网络
写这篇文章之前,先说明一下,我参考的是我之前写的《VirtualBox Linux网络配置》 我从CentOS7转到了Rock9,和配置Centos7一样,主流程没有变化,变化的是Rock9.x中的配置文件和使用的命令。 我再说一次,因为主…...

知识图谱增强的大型语言模型编辑
https://arxiv.org/pdf/2402.13593 摘要 大型语言模型(LLM)是推进自然语言处理(NLP)任务的关键,但其效率受到不准确和过时知识的阻碍。模型编辑是解决这些挑战的一个有前途的解决方案。然而,现有的编辑方法…...

.NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
在当今数据驱动的时代,向量数据库(Vector Database)作为一种新兴的数据库技术,正逐渐成为软件开发领域的重要组成部分。特别是在 .NET 生态系统中,向量数据库的应用为开发者提供了构建智能、高效应用程序的新途径。 一…...

【claude+deepseek+gemini】基于李群李代数和螺旋理论工业机器人控制系统软件UI设计
claude的首次设计html是最佳的。之后让deepseek和gemini根据claude的UI设计进行改进设计。。。当然可以尝试很多次,也可以让他们之间来回不断改进…… claude deepseek-r1 0528 上图为deepseek首次设计,下面为改进设计 …… Gemini 2.5 Pro 0506 &#x…...

阿里云国际站,如何通过代理商邀请的链接注册账号
阿里云国际站:如何通过代理商邀请链接注册,解锁“云端超能力”与专属福利? 渴望在全球化浪潮中抢占先机?想获得阿里云国际站的海量云资源、遍布全球的加速节点与前沿AI服务,同时又能享受专属折扣、VIP级增值服务支持或…...

乾坤qiankun的使用
vue2 为主应用 react 为子应用 在项目中安装乾坤 yarn add qiankun # 或者 npm i qiankun -Svue主应用 在main.js中新增 (需要注意的是路由模型为history模式) registerMicroApps([{name: reactApp,entry: //localhost:3011,container: #container,/…...
从仿射矩阵得到旋转量平移量缩放量
仿射变换原理 仿射变换是一种线性变换,可以包括平移、旋转、缩放和剪切等操作。其一般公式可以表示为: $$\mathbf{x’} A \mathbf{x} \mathbf{b} ] 其中: (\mathbf{x}) 是输入向量,通常表示一个点在二维或三维空间中的坐标。(…...
Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置
错误Dockerfile配置示例: FROM python:3.11 as buildENV http_proxyhttp://172.17.0.1:7890 ENV https_proxyhttp://172.17.0.1:7890WORKDIR /appENV PYTHONPATH/app# Install Poetry # RUN curl -sSL https://install.python-poetry.org | POETRY_HOME/opt/poetry…...
Docker 镜像深度剖析:构建、管理与优化
一、前言 在容器化浪潮中,Docker镜像已成为构建可移植、标准化部署服务的基石。优质的镜像不仅能提升构建效率,更显著影响运行时性能和资源利用率。 本文将深入剖析Docker镜像的底层架构与工作原理,并通过实战案例详细演示镜像构建与优化技巧…...
使用 Flutter 开发 App 时,想要根据 Figma 设计稿开发出响应式 UI 界面
在使用 Flutter 开发 App 时,想要根据 Figma 设计稿开发出响应式 UI 界面(Responsive UI),以适配不同尺寸和分辨率的手机设备,需要从 设计阶段 和 编码实现阶段 双向配合。以下是详细的实现思路与方法: &am…...
Flink2.0及Flink-operater在K8S上部署
1.查找镜像 dockerhub访问不了的可以访问这个查找镜像 https://docker.aityp.com/ 在docker服务器上拉取flink镜像到本地 拉取镜像到你的docker服务器本地 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/flink:2.0.0-scala_2.12-java17 将docker服…...

PH热榜 | 2025-06-03
1. Knowledge 标语:像认识朋友一样去销售给潜在客户,因为你其实了解他们! 介绍:Knowledge 是一个针对个人的销售智能平台,它利用行为数据和心理测评来识别市场上的潜在买家,并指导销售团队以最真实、最有…...

论文略读: STREAMLINING REDUNDANT LAYERS TO COMPRESS LARGE LANGUAGE MODELS
2025 ICLR 判断模型层的重要性->剪去不重要的层(用轻量网络代替) 这种方法只减少了层数量,所以可以用常用的方法加载模型 层剪枝阶段 通过输入与输出的余弦相似度来判断各个层的重要性 具有高余弦相似度的层倾向于聚集在一起,…...

mapbox高阶,生成并加载等时图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️Fill面图层样式1.4 ☘️symbol符号图层…...
深入剖析物联网边缘计算技术:架构、应用与挑战
在物联网(IoT)蓬勃发展的当下,海量设备产生的数据如潮水般涌来,对数据处理和响应速度提出了前所未有的挑战。边缘计算技术应运而生,成为物联网领域的关键支撑技术之一。它就像在物联网网络的“边缘”部署了一个个智能小…...

DeepSeek眼中的文明印记:山海经
一、山海经到底是怎么回事? 《山海经》是中国古代一部极具神秘色彩的文化典籍,成书时间跨度较大(大致从战国至汉代),内容庞杂,涉及神话、地理、物产、巫术、医学、民俗等多个领域。关于它的性质࿰…...

在Mathematica中实现Newton-Raphson迭代
为了寻找方程 可以使用Newton-Raphson迭代方法: NRIter[func_, xzero_, n_ : 5] :Module[{pointlist {}, x, xold xzero, xnew, f, df, xl, xr, k},f[x_] func[x];df[x_] D[func[x], x];Do[(pointlist Join[pointlist, {{xold, 0}}, {{xold, f[xold]}}];xnew …...

【Ragflow】25.Ragflow-plus开发日志:excel文件解析新思路/公式解析适配
引言 RagflowPlus v0.3.0 版本中,增加了对excel文件的解析支持,但收到反馈,说效果并不佳。 以下测试文件内容来自群友反馈提供,数据已脱敏处理。 经系统解析后,分块效果如下: 可以看到,由于该…...

Python数据可视化科技图表绘制系列教程(一)
目录 创建多个坐标图形(坐标系) 图表的组成 创建图形与子图 创建子图1 创建子图2 创建子图3 创建子图4 创建子图5 添加图表元素 极坐标图1 极坐标图2 【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、…...