File类的用法和InputStream,OutputStream的用法
这里写自定义目录标题
- 一、File类
- 1.构造方法
- 2.普通方法
- 二、InputStream
- 1.方法
- 2.FileInputStream
- 3.Scanner类的应用
- 三、OutputStream
- 1.方法
- 2.FileOutputStream
- 3.PrintWriter类的应用
一、File类
1.构造方法
| 签名 | 说明 |
|---|---|
| File(File parent, Stringchild) | 根据父目录 + 孩子文件路径,创建一个新的 File 实例 |
| File(String pathname) | 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径 |
| File(String parent, Stringchild) | 根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示 |
2.普通方法
getAbsolutePath()和getCanonicalPath():
getAbsolutePath():返回 File 对象的绝对路径
getCanonicalPath():返回 File 对象的修饰过的绝对路径
假设我们创建一个File file = new File(文件地址),若文件地址是绝对路径,则上述两个方法输出结果相同,均为D:\hello-world.txt;若文件地址是相对路径如:File file = new File("..\\hello.txt");则输出会略有不同:
getAbsolutePath()会输出:D:\hello-world.txt;
getCanonicalPath()会输出:D:\.\hello-world.txt;
余下的比较简单,如下:

想看全部普通方法的可以自行了解api,给大家贴一个链接:File
二、InputStream
1.方法
| 签名 | 说明 |
|---|---|
| read() | 读取一个字节的数据,返回 -1 代表已经完全读完了 |
| read(byte[] b) | 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了 |
| read(byte[] b,int off, int len) | 最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了 |
| close() | 关闭字节流 |
因为InputStream是抽象类,因此我们还需要了解它的具体实现类,在这里我距离文件操作的实现类 FileInputStream。
2.FileInputStream
构造方法:
| 签名 | 说明 |
|---|---|
| FileInputStream(File file) | 利用 File 构造文件输入流 |
| FileInputStream(String name) | 利用文件路径构造文件输入流 |
案例:
读取ASCII码字符并显示:
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "Hello" 的内容
public class Main {public static void main(String[] args) throws IOException {try (InputStream is = new FileInputStream("hello.txt")) {byte[] buf = new byte[1024];int len; while (true) {len = is.read(buf);if (len == -1) {// 代表文件已经全部读完break;}for (int i = 0; i < len; i++) {System.out.printf("%c", buf[i]);}}}}
}
读取汉字并显示:为什么要有这两个案例呢?因为汉字在UTF-8 编码下占三个字符,所以我们需要修改输出,细节如下:
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
public class Main {public static void main(String[] args) throws IOException {try (InputStream is = new FileInputStream("hello.txt")) {byte[] buf = new byte[1024];int len;while (true) {len = is.read(buf);if (len == -1) {// 代表文件已经全部读完break;}// 每次使用 3 字节进行 utf-8 解码,得到中文字符// 利用 String 中的构造方法完成// 这个方法了解下即可,不是通用的解决办法for (int i = 0; i < len; i += 3) {String s = new String(buf, i, 3, "UTF-8");System.out.printf("%s", s);}}}}
}
3.Scanner类的应用
上述例子中,我们看到了对字符类型直接使用 InputStream 进行读取是非常麻烦且困难的,所以,我们使用一种我们之前比较熟悉的类来完成该工作,就是 Scanner 类,它可以通过传输一个charset类型,通过编码类型对字符进行自动的调整,是数据正常输出。
| 签名 | 说明 |
|---|---|
| Scanner(InputStream is, String charset) | 使用 charset 字符集进行 is 的扫描读取 |
案例修改:
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
public class Main {public static void main(String[] args) throws IOException {try (InputStream is = new FileInputStream("hello.txt")) {try (Scanner scanner = new Scanner(is, "UTF-8")) {while (scanner.hasNext()) {String s = scanner.next();System.out.print(s);}}}}
}
三、OutputStream
1.方法
| 签名 | 说明 |
|---|---|
| write(int b) | 写入要给字节的数据 |
| write(byte[]b)) | 将 b 这个字符数组中的数据全部写入 os 中 |
| write(byte[]b, int off,int len) | 将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个 |
| close() | 关闭字节流 |
| flush() | 我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中。 |
因为OutputStream是抽象类,因此我们还需要了解它的具体实现类,在这里我距离文件操作的实现类 FileOutputStream。
2.FileOutputStream
构造方法:
| 签名 | 说明 |
|---|---|
| FileOutputStream(File file) | 利用 File 构造文件输出流 |
| FileOutputStream(String name) | 利用文件路径构造文件输出流 |
案例:
ASCII码字符案例:
public class Main {public static void main(String[] args) throws IOException {try (OutputStream os = new FileOutputStream("output.txt")) {String s = "Nothing";byte[] b = s.getBytes();os.write(b);// 不要忘记 flushos.flush();}}
}
汉字案例:
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
public class Main {public static void main(String[] args) throws IOException {try (OutputStream os = new FileOutputStream("output.txt")) {String s = "你好中国";byte[] b = s.getBytes("utf-8");os.write(b);// 不要忘记 flushos.flush();}}
}
3.PrintWriter类的应用
上述,我们其实已经完成输出工作,但总是有所不方便,我们接来下将 OutputStream 处理下,使用PrintWriter 类来完成输出,因为PrintWriter 类中提供了print/println/printf 方法
案例修改:
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
public class Main {public static void main(String[] args) throws IOException {try (OutputStream os = new FileOutputStream("output.txt")) {PrintWriter writer = new PrintWriter(os);writer.print("你想写入的内容");// 不要忘记 flushwriter.flush();}}
}
相关文章:
File类的用法和InputStream,OutputStream的用法
这里写自定义目录标题一、File类1.构造方法2.普通方法二、InputStream1.方法2.FileInputStream3.Scanner类的应用三、OutputStream1.方法2.FileOutputStream3.PrintWriter类的应用一、File类 1.构造方法 签名说明File(File parent, Stringchild)根据父目录 孩子文件路径&…...
Java多线程——Thread类的基本用法
一.线程的创建继承Thread类//继承Thread类class MyThread extends Thread{Overridepublic void run() {System.out.println("线程运行的代码");} } public class Demo1 {public static void main(String[] args) {MyThread t new MyThread();t.start();//启动线程&a…...
【C++】类和对象练习——日期类的实现
文章目录前言1. 日期的合法性判断2. 日期天数(/)2.1 和的重载2.2 对于两者复用的讨论3. 前置和后置重载4. 日期-天数(-/-)5. 前置- -和后置- -的重载6. 日期-日期7. 流插入<<重载8. 流提取>>重载9. 总结10. 源码展示前…...
[LeetCode周赛复盘] 第 333 场周赛20230219
[LeetCode周赛复盘] 第 333 场周赛20230219 一、本周周赛总结二、 [Easy] 6362. 合并两个二维数组 - 求和法1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6365. 将整数减少到零需要的最少操作数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6364. 无平方子集计数1. 题目描…...
数字化时代,如何做好用户体验与应用性能管理
引言 随着数字化时代的到来,各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务,这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责,且使用多种运维工具,因此,当…...
Python爬虫(7)selenium3种弹窗定位后点击操作,解决点击登录被隐藏iframe无法点击的登陆问题
之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览…...
如何对项目健康度进行测量?评估项目健康状况
项目驱动变革,大部分公司逐步由运营驱动转变为项目驱动,带来更多重新和商业价值。对组织而言,从商业角度看,项目旨在推动组织从一个状态转到另一个状态,从而达成特定目标。项目的健康情况如何关乎项目和变革的成本&…...
美国原装二手keysight E4980A(安捷伦)2MHZ LCR表
Agilent E4980A、Keysight E4980A、LCR 表,20 Hz - 2 MHz E4980A 是 Agilent 的 2 MHz LCR 表。LCR表是一种电子测试设备,用于测量电子元件的电感(L)、电容(C)和电阻(R)。LCR 表可…...
《clean coder》:关于摆烂,争论和心态
“凡是不能在五分钟之内解决的争论,都不能依靠辩论解决” ---- Kent Beck 作为一个码农,我并不是一个喜欢争论的角色。很长一段时间会陷入一种摆烂的,被动的状态。“既然其他人想要这么做,就这么办吧”。这可能是非专业的行为中最…...
jenkins下载与简单使用
1.jenkins下载 因为我仍然使用的是jdk1.8进行开发,所以我下载的是jenkins2.332.1版本(jenkins2.346.1版本在2022年末不再支持java8,如果项目使用的是jdk11可以继续使用该jenkins版本),更多版本下载请点击jenkins下载 …...
3|物联网控制|计算机控制-刘川来胡乃平版|第3章:计算机总线技术 补充串行总线部分|课堂笔记|ppt
2022年 10月 10日 3.3 外部总线 3.3.2 RS-232-C总线 机械特性...
Blazor入门100天 : 身份验证和授权 (3) - DB改Sqlite
目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…...
阅读源码和查看官方文档,是解决问题最高效的办法。
作为一个工作8年的老程序员告诉你:阅读源码和查看官方文档,是解决问题最高效的办法。不信你来看,这个困扰了读者半天的问题我查了源码和文档后瞬间解决。 前言 上周五有位读者私信我一个问题,说困扰了他半天,研究了一…...
云原生流量管理系统中 Service , Ingress 和 Endpoint 的关系
摘要 Kubernetes(简称 K8s)是一个用于容器编排和管理的开源平台,其中流量管理是 K8s 的重要功能之一。K8s 提供了多种流量管理方式,以便对不同场景下的流量进行控制和管理。以下是 K8s 中常用的流量管理系统: Service:Service 是 K8s 中最基本的流量管理方式,用于提供…...
给你安利几款好用的谷歌浏览器插件
给你安利几款好用的谷歌浏览器插件前言一 Octotree 插件二 GitCodeTree 插件三 SourceGraph 插件四 GitZip 插件五 Enhanced GitHub 插件六 插件下载安装6.1 谷歌应用商店下载6.2 离线安装6.2.1 下载插件6.2.2 安装插件七 移除、启用、停用插件小结前言 GitHub是全球最大的代码…...
JDK定时器Timer原理
前言 前些时间想到利用redis实现延时队列,但是底层的定时器不止如何实现好些,故此研究了一下jdk的Timer。 Timer是一个用于执行定时任务的类,可以单次执行或按指定时间间隔循环执行(直到主动cancel或线程被杀掉)。Ti…...
vue3中使用swiper完整版教程
介绍 在 vue3 中使用 swiper, 实现轮播图的效果;如果组件样式等模块引入不当,很有可能导致,页面无效果;或者想要的箭头或者切换效果异常问题。具体使用方式如下所示: 使用方式 使用命令 npm install swiper 安装 sw…...
某个div的滚动条样式
.item-body,.chart2{/*滚动条整体样式*/&::-webkit-scrollbar {/*高宽分别对应横竖滚动条的尺寸*/width: 10px;height: 1px;}/*滚动条里面小方块*/&::-webkit-scrollbar-thumb {border-radius: 10px;-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);background:…...
Spring Boot框架基础介绍
Spring Boot 是一款基于 Spring 框架的开源应用程序开发工具,它旨在简化 Spring 应用程序的配置和开发过程。Spring Boot 提供了一种简单的方式来创建可独立运行的、生产级别的应用程序,并在需要时进行部署。Spring Boot 在微服务架构和云计算环境下得到…...
Git - 在主分支上创建分支并提交代码
拉取最新代码 因为当前在 master 分支下,你必须拉取最新代码,保证当前代码与线上同步(最新),执行以下命令: git pull origin master创建分支 目前我们在 master 主分支上,需要执行以下命令&…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...
理想汽车5月交付40856辆,同比增长16.7%
6月1日,理想汽车官方宣布,5月交付新车40856辆,同比增长16.7%。截至2025年5月31日,理想汽车历史累计交付量为1301531辆。 官方表示,理想L系列智能焕新版在5月正式发布,全系产品力有显著的提升,每…...
【多线程初阶】单例模式 指令重排序问题
文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...
mcts蒙特卡洛模拟树思想
您这个观察非常敏锐,而且在很大程度上是正确的!您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些,您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”,这个观察非…...
信息系统分析与设计复习
2024试卷 单选题(20) 1、在一个聊天系统(类似ChatGPT)中,属于控制类的是()。 A. 话语者类 B.聊天文字输入界面类 C. 聊天主题辨别类 D. 聊天历史类 解析 B-C-E备选架构中分析类分为边界类、控制类和实体类。 边界…...
