Java IO: 使用 `FileInputStream` 和 `FileOutputStream` 进行文件操作

在 Java 中,文件 I/O 操作是常见的任务。FileInputStreamFileOutputStream 是用于读取和写入文件的基础类,适用于处理二进制数据。本文将介绍如何使用 FileInputStreamFileOutputStream,并提供具体的示例代码。

FileInputStream 类概述

FileInputStream 类是 Java 中用于读取文件内容的类,它继承自 InputStreamFileInputStream 主要用于读取二进制文件或以字节流方式读取文本文件。

FileInputStream 的基本用法

要使用 FileInputStream 读取文件,需要先创建一个 FileInputStream 对象,然后通过 read() 方法读取文件内容。

import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamExample {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("example.txt")) {int byteData;while ((byteData = fis.read()) != -1) {System.out.print((char) byteData);}} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,我们使用 FileInputStream 逐字节读取 example.txt 文件的内容,并将其打印到控制台。注意,我们使用了 try-with-resources 语句来自动关闭 FileInputStream

使用缓冲区读取文件

FileInputStream 还可以使用字节数组作为缓冲区,一次读取多个字节。

import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamBufferExample {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("example.txt")) {byte[] buffer = new byte[100];int bytesRead;while ((bytesRead = fis.read(buffer)) != -1) {System.out.print(new String(buffer, 0, bytesRead));}} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,我们使用一个字节数组作为缓冲区,逐块读取文件内容,并将其转换为字符串打印到控制台。

FileOutputStream 类概述

FileOutputStream 类是 Java 中用于写入文件内容的类,它继承自 OutputStreamFileOutputStream 主要用于将二进制数据写入文件,按字节流的方式写入文件内容。

FileOutputStream 的基本用法

要使用 FileOutputStream 写入文件,需要先创建一个 FileOutputStream 对象,然后通过 write() 方法写入文件内容。

import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamExample {public static void main(String[] args) {try (FileOutputStream fos = new FileOutputStream("example.txt")) {String content = "Hello, World!";fos.write(content.getBytes());} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,我们使用 FileOutputStream 将字符串 “Hello, World!” 写入 example.txt 文件。使用 try-with-resources 语句确保 FileOutputStream 在完成写操作后自动关闭。

追加写入文件

FileOutputStream 还支持追加写入文件,只需在构造函数中传入 true 作为第二个参数即可。

import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamAppendExample {public static void main(String[] args) {try (FileOutputStream fos = new FileOutputStream("example.txt", true)) {String content = "Appended text.";fos.write(content.getBytes());} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,我们将字符串 “Appended text.” 追加写入 example.txt 文件,而不是覆盖原有内容。

结合使用 FileInputStreamFileOutputStream

在实际开发中,常常需要结合使用 FileInputStreamFileOutputStream 来读取和写入文件内容。以下是一个示例,展示如何读取一个文件的内容并将其写入另一个文件。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileCopyExample {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("input.txt");FileOutputStream fos = new FileOutputStream("output.txt")) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fis.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);}} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,我们使用 FileInputStream 逐块读取 input.txt 文件的内容,并使用 FileOutputStream 将其写入 output.txt 文件。通过 try-with-resources 语句确保两个流都能在操作完成后自动关闭。

总结

FileInputStreamFileOutputStream 是 Java 中用于处理文件 I/O 的基础类,它们提供了简单而高效的方法来读取和写入二进制文件。

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

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

相关文章

深入分析 Android BroadcastReceiver (七)

文章目录 深入分析 Android BroadcastReceiver (七)1. 高级应用场景1.1 示例:动态权限请求1.2 示例:应用内通知更新 2. 安全性与性能优化2.1 示例:设置权限防止广播攻击2.2 示例:使用 LocalBroadcastManager2.3 示例:在…

三分钟给AI Agent应用对话增加人类情感!

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

[算法]——堆排序(C语言实现)

简单的介绍一下用堆排序的算法对整形数据的数据进行排序。 一、堆的概念 堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 …

GenAI 用于客户支持 — 第 1 部分:构建我们的概念验证

作者:来自 Elastic Chris Blaisure 欢迎来到 Inside Elastic 博客系列,我们将展示 Elastic 的内部运营如何解决实际业务挑战。本系列将揭示我们将生成式 AI(gererative AI - GenAI)集成到客户成功和支持运营中的历程,让…

ctfshow web入门 sqli-labs web517--web524

web517 注入点id ?id-1’union select 1,2,3– 确认是否能够注入 ?id-1union select 1,database(),3-- 爆出库名 security爆出表名 ?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3-- emails,refer…

使用辅助编程的一些思考

1 引子 最近使用辅助编程比较频繁,也在思考: 它的出现对程序员来说是利大于弊还是弊大于利。对非程序员来说,有了辅助编程是否就能达到程序员的水平?目前,辅助编程还不能解决哪些问题呢? 1.1 使用场景 …

CSS中 transform: scale , transform-origin 属性

scale() 函数 scale() 函数接受一个或两个参数,分别表示在 X 轴和 Y 轴上的缩放比例。如果只提供一个参数,那么 X 轴和 Y 轴都将按相同的比例缩放。 scale(sx, sy) sx 是 X 轴的缩放因子。sy 是 Y 轴的缩放因子。如果省略,则默认为 sx 的值…

分享一些面试经验

计算机类面试准备指南 目录 简介简历准备 个人信息教育背景工作经历项目经验技能清单证书与奖励 技术知识复习 编程语言数据结构与算法计算机基础知识系统设计 面试题型 行为面试技术面试在线编程测试系统设计面试 面试技巧 自我介绍回答技巧沟通技巧常见问题应对 模拟面试 单…

几个常见的FPGA问题之序列发生器、编码器、D触发器

几个常见的FPGA问题之序列发生器、编码器、D触发器 语言 :Verilg HDL 、VHDL EDA工具: Vivado 几个常见的FPGA问题之序列发生器、编码器、D触发器一、引言二、背景1、序列发生器(Sequence Generator)2、编码器(Encoder)3、D触发器(D Flip-Flop)二、问题及解决方案1. 序…

二进制方式部署consul单机版

1.consul的下载 mkdir -p /root/consul/data && cd /root/consul wget https://releases.hashicorp.com/consul/1.18.0/consul_1.18.0_linux_amd64.zip unzip consul_1.18.0_linux_amd64.zip mv consul /usr/local/bin/ 2.配置文件 // 配置文件路径: /roo…

将深度相机的实时三维坐标数据保存为excel文档

一、如何将数据保存为excel文档 1.excel文件库与相关使用 (1)导入相应的excel文件库,导入前先要进行pip安装,pip install xlwt import xlwt # 导入用于创建和写入Excel文件的库 (2) 建立一个excel文档,并在第0行写…

公司面试题总结(八)

43.Vue 组件之间的通信方式都有哪些 ⚫ 通过 props 传递:父组件传递数据给子组件 ◼ 子组件设置 props 属性,定义接收父组件传递过来的参数 ◼ 父组件在使用子组件标签中通过字面量来传递值 ⚫ 通过$emit 触发自定义事件:子组件传递数…

使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(1)

创建一个Java程序,建立与本机mysql服务器上student数据库的连接,实现在tb_student学生表上插入一条学生信息:学号21540118,姓名王五,性别男,出生日期2003-12-10,所在学院5。 使用JDBC连接数据库后实现数据库插入操作代码如下: import java.sql.Connection; import ja…

web安全渗透测试十大常规项(一):web渗透测试之Fastjson反序列化

渗透测试之Java反序列化 1. Fastjson反序列化1.1 FastJson反序列化链知识点1.2 FastJson反序列化链分析1.3.1 FastJson 1.2.24 利用链分析1.3.2 FastJson 1.2.25-1.2.47 CC链分析1.3.2.1、开启autoTypeSupport:1.2.25-1.2.411.3.2.2 fastjson-1.2.42 版本绕过1.3.2.3 fastjson…

IO多线程

文章目录 C#中的IOC#中的多线程IO与多线程的关系注意事项示例代码注意事项和解释 在C#中,IO(输入/输出)和多线程是两个强大的功能,它们各自在处理文件、网络、数据库等IO操作时,以及提高程序并发性和响应能力方面发挥着…

C++调试技巧总结

1.调试准备 常用调试 Crash调试 调试信息: Windows系统:符号单独PDB文件/链接时生成,从外部的符号服务器下载。(微软) LInux: 调试符号与目标模块在一个文件内,编译时产生调试信息。模块发布时…

手机数据恢复篇:如何在OPPO中恢复永久删除的视频?

说到丢失重要的记忆,如何在OPPO设备中恢复永久删除的视频是一个经常困扰许多用户的话题。意外删除重要视频的情况并不少见,对许多人来说,意识到它们已经消失可能很困难。但是,在正确的指导、方法和工具的帮助下,可以找…

运行CDN

背景 CDN代码,调试运行 日常 git clone代码配置虚拟环境 puthon3.8,pip install r requirements.txt改项目数据集路径,在hico.py文件里面 # PATHS {# train: (root / images / train2015, root / annotations / trainval_hico.json),# val: …

性能优化:Java垃圾回收机制深度解析 - 让你的应用飞起来!

文章目录 一、什么是垃圾回收二、Java 内存区域划分三、垃圾回收算法1. 标记-清除(Mark-Sweep)算法2. 复制(Copying)算法3. 标记-整理(Mark-Compact)算法4. 分代收集(Generational Collecting&a…

C#面:C#如何在同一个类中实现多个具有相同方法名的接口?

在C#中,一个类可以实现多个具有相同方法名的接口。为了实现这种情况,你需要在类声明中使用逗号分隔的接口列表。然后,你需要在类中实现每个接口的方法。 下面是一个示例代码,演示了如何在同一个类中实现多个具有相同方法名的接口…