当前位置: 首页 > 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…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...