当前位置: 首页 > news >正文

[文件操作] File 类的用法和 InputStream, OutputStream 的用法

能吃是不是件幸福的事呢

文章目录

  • 前言
  • 1. 文件的相关定义
  • 2. 文件类型
  • 3. Java对文件系统的操作
    • 3.1 对文件的基础操作
    • 3.2 读文件
    • 3.3 写文件


前言

从这章开始,我们就开始学文件操作相关的知识了~


1. 文件的相关定义

1.文件的定义可以从狭义和广义两个方面解释.
狭义: 指硬盘上的文件和目录(目录指文件夹)
广义: 在操作系统中,把很多的硬件设备和软件资源都抽象成文件,按文件的方式统一管理.
2.盘符
如D盘,C盘,用d: c: 表示,不区分大小写.
3.路径
绝对路径,就是电脑中文件的位置.如下图,双击箭头处,能获取到文件的绝对路径.
F:\Java初阶练习\LinkedList
在这里插入图片描述
相对路径: 以当下目录为基准,以" . “或者” … “开头,例如当下目录为F: ,则可以用”./Java初阶练习"代表Java初阶练习.

2. 文件类型

文件类型分为文本文件和二进制文件.
文本文件存的是文本,以字符串的方式存储.
二进制文件可以存任何类型的数据.
如何判断一个文件是文本文件还是二进制文件呢?
一个文件右键,以记事本方式打开,如果显示是乱码,则是二进制文件.

3. Java对文件系统的操作

3.1 对文件的基础操作

1.文件对象的创建
我们使用File类的构造方法,给要创建的文件指定一个路径.如下代码,f0就是在相应路径下的文件。

File f0 = new File("d:/file1.txt");
获取文件名	       System.out.println(f.getName());
获取文件路径        System.out.println(f.getPath());
获取文件绝对路径    System.out.println(f.getAbsolutePath());System.out.println(f.getCanonicalPath());
是否存在           System.out.println(f.exists());
是否是文件         System.out.println(f.isFile());

执行结果如下(file不存在)
在这里插入图片描述
2.创建目录
//创建目录

        File dir = new File("./test");dir.mkdir();

//创建多级目录

		File dir2 = new File("./test/aaa");dir2.mkdirs();

3.文件重命名
如下代码,给f1重命名,将dest的名字付给f1.

		File f1 = new File("./test/aaa");File dest = new File("./test/AAA");f1.renameTo(dest);

在这里插入图片描述

3.2 读文件

读出来的字节用b接收,如果b为-1,则说明文件读取完毕.
用read()方法进行读取,这个方法有三种形式,无参,传数组,传数组的固定部分.
下面的代码是无参的形式

	InputStream in0 = new FileInputStream("d:/file1.txt");while(true){int b = in0.read();if(b == -1){  //b == -1,代表文件读取完毕break;}System.out.printf("%x\n",(byte)b);}in0.close();

执行结果如下,因为以字节形式显示,所以对应ASCII码表,这四个代表字符a,b,c,d.
在这里插入图片描述
在这里插入图片描述

以数组形式读取,把文件读到数组里.
注意,循环里的len显示的是数组真实被填写的长度.

		InputStream in1 = new FileInputStream("d:/file1.txt");int len = 0;while(true){//一次读取1024个字节byte[] b = new byte[1024];len = in1.read(b);if(len == -1){break;}for(int i = 0; i < len; i++){System.out.printf("%x\n", b[i]);}}in1.close();

//读取部分元素,0表示从数组0下标开始读,1表示读取1个元素.

		InputStream in1 = new FileInputStream("d:/file1.txt");int len = 0;//一次读取1024个字节byte[] b = new byte[1024];len = in1.read(b, 0, 1);for (int i = 0; i < len; i++) {System.out.printf("%x\n", b[i]);}in1.close();

3.3 写文件

写文件用write方法写,同样有三种形式,直接写,以数组形式写,把数组的部分元素写进文件.
1.直接把元素写进去,可以直接用字符表示,也可以用ASCII码表示.
注意flush()方法,我们写文件时,电脑不会写一个存一个,是先把元素存到缓冲区,直到缓冲区满了或者到了指定时刻,才会真正把缓冲区里的数据一次性转到硬盘上,提高效率.
注意,我们这里不用写close(),自己关闭文件了,把代码放进try()里,文件写完会自动关闭.

		try (OutputStream o = new FileOutputStream("d:/file1.txt")) {o.write('h');o.write(98);o.write(99);o.write(100);o.flush();}

以数组形式写入

		try(OutputStream o1 = new FileOutputStream("F:/Write.txt")) {//直接把全部数组元素写入byte[] b = new byte[]{(byte) 'h', (byte) 'a', (byte) 'b'};o1.write(b);//从0开始写,写1个元素o1.write(b,0,1);//把字符串转成byte数组写入String s = "i am warm";byte[] b1 = s.getBytes();o1.write(b1);String s1 = "我是坏人";byte[] b2 = s1.getBytes("utf-8");o1.write(b2);o1.flush();}

2.用printWriter写入.
用printWriter可以用print之类的方法写文件.

    try( OutputStream o2 = new FileOutputStream("f:/PrintWrite.txt")) {OutputStreamWriter osw = new OutputStreamWriter(o2, "utf-8");PrintWriter pw = new PrintWriter(osw);pw.print("mind");pw.println("bb");pw.printf("%d %s", 1, "hh");pw.flush();}

执行结果如下
在这里插入图片描述
本文完


相关文章:

[文件操作] File 类的用法和 InputStream, OutputStream 的用法

能吃是不是件幸福的事呢 文章目录前言1. 文件的相关定义2. 文件类型3. Java对文件系统的操作3.1 对文件的基础操作3.2 读文件3.3 写文件前言 从这章开始,我们就开始学文件操作相关的知识了~ 1. 文件的相关定义 1.文件的定义可以从狭义和广义两个方面解释. 狭义: 指硬盘上的文…...

索莫菲模型的一些理解 Smomerfeld Model

如何解释传统热容算出来的数值与量子模型下的区别&#xff1f; 因为只有费米能附近的电子才能够进行移动&#xff0c;这个是问题的差别所在 我们下面就来介绍如何求费米能&#xff08;费米能的计算&#xff09; 既然费米能附近的电子很重要&#xff0c;那么附近的电子有多少很…...

SAP ERP系统MM模块常用增强之四:采购申请输入字段的校验检查

在SAP/ERP项目的实施中采购管理模块&#xff08;MM&#xff09;的创建和修改采购申请一般都会有输入字段校验检查的需求&#xff0c;来防止业务人员录入错误或少录入数据&#xff0c;这方面需求部分是可以通过配置实现&#xff0c;比如一些字段是否必输&#xff0c;是否显示等&…...

STM32C0介绍(1)----概述

概述 STM32C0系列微控制器是意法半导体公司推出的一款低功耗、高性能的微控制器产品。它们被设计用于需要小型、低功耗和高度可集成的应用程序&#xff0c;如传感器、消费品、电池供电设备、家庭自动化和安全等应用。该系列的微控制器采用ARM Cortex-M0内核&#xff0c;具有丰…...

windows无盘启动技术开发之传统BIOS(Legacy BIOS)引导程序开发之一

by fanxiushu 2023-03-01 转载或引用请注明原始作者。这个话题可能有点老&#xff0c;UEFI BIOS 已经大量存在&#xff0c;而Legacy BIOS最终会被取代。但是也是作为无盘启动技术里不可或缺的&#xff0c;毕竟还有许多老型号的电脑存在&#xff0c;而且为了兼容性&#xff0c;有…...

mysql实现if语句判断功能的六种使用形式

文章目录 前言一、ifnull函数二、nullif函数三、if函数四、if语句(多用于存储过程)五、if-else语句(多用于存储过程)六、if-elseif-else语句(多用于存储过程)总结前言 在Mysql数据库中实现判断功能有很多方式,具体又分为函数和if语句形式,函数的好处是可以作为sql的一…...

在Vue3这样子写页面更快更高效

前言 在开发管理后台过程中&#xff0c;一定会遇到不少了增删改查页面&#xff0c;而这些页面的逻辑大多都是相同的&#xff0c;如获取列表数据&#xff0c;分页&#xff0c;筛选功能这些基本功能。而不同的是呈现出来的数据项。还有一些操作按钮。 对于刚开始只有 1&#xff…...

做软件测试,如何才能实现月入20K?

听我的&#xff0c;测试想要月入20k。 首先你要去大厂&#xff0c;不在大厂起码也得在一线城市&#xff0c;北上广深。 二线城市的话成都、杭州最好。 不然的话想都不要想。 像我之前整理过成都的公司&#xff0c;除了字节跳动、蚂蚁金服、滴滴、美团、京东、平安、字节跳动…...

mysql last lesson

1:创建用户 create user zhang identified by 12345678;2&#xff1a;给用户授权&#xff0c;撤销授权&#xff0c; grant.......to revoke ....... 3:将数据库中的数据导出 C:\Windows\system32>mysqldump bjpowernode>C:\bjpowernode.sql -uroot -p12345678 4&#…...

一、Redis入门概述(是什么,能干嘛,去哪下,怎么玩)

一. redis是什么&#xff1f; Redis:REmote Dictionary Server(远程字典服务器)官方解释&#xff1a; Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff…...

(六十二)当我们在SQL里进行分组的时候,如何才能使用索引?

今天我们接着上次的内容来谈谈在SQL语句里假设你要是用到了group by分组语句的话是否可以用上索引&#xff0c;因为大家都知道&#xff0c;有时候我们会想要做一个group by把数据分组接着用count sum之类的聚合函数做一个聚合统计。 那假设你要是走一个类似select count(*) fr…...

python字符串练习

python字符串练习 1.去掉字符串中所有的空格 s This is a demo print(s.replace( , )) 2.获取字符串中数字的个数 data input("请输入一些字符串&#xff1a;") a 0 for i in data:if i.isdigit():a a 1 print("数字个数:", a)3.将字母全部转换为…...

Java-封装、继承、多态

封装 访问控制权限又成为“封装”&#xff0c;是面向对象三大特征中的一种。核心是&#xff0c;只对需要的类可见。 继承 继承是所有OOP&#xff08;Object Oriented Programming&#xff09;语言和Java语言都不可或缺的一部分。 只要创建一个类&#xff0c;就隐式继承自Obje…...

问题三十二:离散二维傅立叶变换(Discrete Fourier Transformation)

为了将灰度图像表示为频谱图&#xff0c;我们需要进行以下步骤&#xff1a; 加载图像并将其转换为灰度图像。对图像进行二维离散傅里叶变换。将变换结果表示为幅度谱和相位谱。可以对幅度谱和相位谱进行可视化&#xff0c;以查看频率分布。对幅度谱和相位谱进行逆变换&#xf…...

恢复谷歌翻译的究极方法

谷歌翻译为什么会失效&#xff0c;我想各位在去年11月的时候就知道了。可是要怎么解决失效的问题呢&#xff1f;之前我们是通过手动Ping可以连接的ip各位可能觉得麻烦&#xff0c;心里觉得什么档次还要我手动ping就没有可以自动扫描的吗&#xff1f;还别说真的有我最近发现一个…...

string函数以及string常用接口

本文介绍的是C关键字string中一些重要用法&#xff0c;以及各种字符串序列的处理操作 ——飘飘何所似&#xff0c;天地一沙鸥 文章目录前言一、string&#xff08;字符串类&#xff09;二、string类对象的容量操作2.1 size/length2.2 capacity2.3 empty/clear2.4 resize/reser…...

分享一篇由C语言实现《数据结构》无头无循环单链表

三月&#xff0c;你好&#xff0c;各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作&#xff08;增&#xff0c;删&#xff0c;查&#xff0c;改&#xff0c;销毁&#xff0c;遍历&#xff09;1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…...

C盘爆满?两个超简单的解决办法

我们在使用电脑的过程中&#xff0c;经常容易出现C盘爆红&#xff0c;反而其他盘还有大量可用空间的情况。为什么会这样呢&#xff1f;其实主要就两种原因&#xff1a;一是电脑使用习惯不好&#xff0c;不管什么软件都默认安装在C盘&#xff0c;大文件又喜欢放在桌面&#xff0…...

ThreadLocal

ThreadLocalThreadLocalMapgetsetremove内存泄漏key用强/弱引用entry继承了弱引用ThreadLocal 一个对象的所有线程会共享其全局变量——>线程不安全 解决方式&#xff1a; 方式一&#xff1a;同步机制&#xff0c;加锁&#xff08;时间换空间&#xff09; 方式二&#xff1a…...

Java基础:JDK7-时间Date

JDK7以前时间相关类 1.Date Date date new Date(); , sout(date)得到的是现在所处位置的时间 Date date new Date(0L); , sout(date)得到的是时间原点也就是1970年1月1日08:00(东八区). date.setTime(1000L); sout(date)得到的是时间原点后一秒钟的时间 long time date.g…...

你的嵌入式数据记录仪方案:基于STM32CubeMX+FATFS+SD卡存储传感器数据(CSV格式实战)

嵌入式数据记录仪实战&#xff1a;STM32CubeMXFATFSSD卡构建工业级CSV存储方案 在工业物联网和智能硬件开发中&#xff0c;可靠的数据记录功能往往是产品核心价值所在。想象一下温室大棚的环境监控系统需要连续记录温湿度数据三个月&#xff0c;或者电力设备振动监测装置要在无…...

HYCONTROL MICROFLEX-DB超声波液位计实操详解(参数+工况+故障排查)

在工业液位测量中&#xff0c;腐蚀性介质、罐内干扰、泡沫水汽、后期维护量大一直是现场普遍痛点&#xff0c;很多中小型储罐、水池、反应罐都会纠结性价比高、调试简单、稳定性强的超声波液位计。今天给大家详细拆解一款进口紧凑型液位变送器&#xff1a;英国HYCONTROL海康MIC…...

NotebookLM提示工程在能源政策分析中的致命误区(附12个经NREL验证的Prompt模板)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM能源技术研究 NotebookLM 是 Google 推出的基于 AI 的研究协作者工具&#xff0c;其核心能力在于对用户上传的私有文档进行语义理解与上下文关联。在能源技术领域&#xff0c;研究人员可借助 Noteb…...

德勤预计机器人投资将在2026年增长的地方

尽管德勤预测到2026年全球⼯业机器⼈基数可能达到550万个&#xff0c;但也承认“⾃2021年以来&#xff0c;年度新机器⼈销量停滞在50万台以上。”为了满⾜以⼈⼝统计为驱动的需求&#xff0c;技术⽣态系统必须解决与数据质量、集成和安全性相关的瓶颈&#xff0c;公司强调“⽬前…...

车载ETH数据链路层

以太网帧协议是​​数据链路层​​的核心封装格式,遵循IEEE 802.3标准。 标准以太网帧结构(IEEE 802.3)​: 前导码(7B)| 帧起始符(1B)| 目标 MAC (6B) | 源 MAC (6B) | ​​EtherType (2B)​​ | Payload (46-1500B) | FCS (4B) | ​1. 前导码 (Preamble)​​ 长度​…...

别再只用人体红外了!聊聊24.125GHz微波模块在智能家居中的另类玩法与局限

24.125GHz微波传感模块的智能家居创新应用与工程实践 在智能家居领域&#xff0c;人体感应技术早已从简单的红外探测走向多传感器融合时代。当大多数开发者还在依赖传统PIR红外传感器时&#xff0c;一种成本仅20元左右的24.125GHz微波模块正在小众硬件圈引发讨论。这种原本用于…...

UniMcp开源项目:构建音乐教育应用的标准化数据协议与开发实践

1. 项目概述&#xff1a;一个为音乐学习应用打造的开发者工具如果你是一名开发者&#xff0c;正在为“Yousician”这类音乐学习应用构建功能&#xff0c;或者你是一个对音乐教育技术感兴趣的程序员&#xff0c;那么你很可能遇到过这样的困境&#xff1a;如何高效地管理那些复杂…...

tmphw16tc47

AgentMDT协作&#xff1a;多学科会诊前的信息整理能不能先交给 AI MDT 会诊前&#xff0c;技术系统最容易被抱怨的不是“模型不够聪明”&#xff0c;而是病历、检验、用药、既往记录分散在不同系统里&#xff0c;人工整理耗时且容易遗漏。本文只讨论技术架构和工程流程示例&am…...

别再被Nginx的rewrite循环搞懵了!一个真实Vue项目部署的500错误排查实录

从Nginx重定向死循环到优雅解决&#xff1a;Vue项目部署的深度排错指南 凌晨三点&#xff0c;服务器监控突然告警——刚上线的Vue企业门户网站出现大面积500错误。查看日志时&#xff0c;那个令人窒息的rewrite or internal redirection cycle错误信息让整个运维团队陷入沉思。…...

Opensmile实战:从零到一的音频特征提取指南

1. 为什么选择Opensmile处理音频特征&#xff1f; 第一次接触音频分析时&#xff0c;我被各种专业工具搞得眼花缭乱。直到实验室的师兄推荐了Opensmile&#xff0c;这个开源工具彻底改变了我的工作效率。它最吸引我的地方在于三点&#xff1a;全流程覆盖&#xff08;从特征提取…...