Java FileOutputStream类

2023-11-18

总结

  1. FileOutputStream类用于将数据写入文件或文件描述符的输出流
  2. FileOutputStream用于写入原始字节流,如图像数据,如果要写入字符流,可以考虑使用FileWriter

FileOutputStream类数据结构

public class FileOutputStream extends OutputStream {
	private final FileDescriptor fd;
    private final String path;
    private volatile FileChannel channel;
    private final Object closeLock = new Object();
    private volatile boolean closed;
}
  1. fd是文件描述符,FileDescriptor里面有一个int型整数fd,和long型整数handle,fd为0代表标准输入流System.in,fd为1代表标准输出流System.out,fd为2代表System.err,而handle是原生方法set根据fd的值计算出来的。FileDescriptor还具有关闭流的功能
  2. path是文件的路径和文件名的组合
  3. channel是FileChannel文件通道,FileChannel文件通道是用于读取、写入、映射和操作文件的通道,可以提供比FileInputStream更强大的操作文件功能,而且channel和当前对象是息息相关的。无论是显式更改通道位置,还是通过读取或写入字节更改通道位置, 都将更改原始对象FileInputStream的文件位置,反之亦然。 通过文件通道更改文件长度将更改通过原始对象FileInputStream看到的长度,反之亦然。通过写入字节更改文件内容将更改原始对象FileInputStream看到的内容,反之亦然
  4. closeLock是用于关闭流的锁
  5. closed用于指示流是否关闭

FileOutputStream类方法

构造方法

方法名 作用
FileOutputStream(File file, boolean append) 创建文件输出流以写入指定文件对象表示的文件。如果第二个参数为true表示追加写入文件,则字节将写入文件的末尾而不是开头。创建一个新的FileDescriptor对象来表示此文件连接
FileOutputStream(File file) 创建文件输出流以写入指定文件对象表示的文件,调用上一个方法,只不过传入的append为false,表示不追加写入,而是从开头覆盖写入
FileOutputStream(String name, boolean append) 创建文件输出流以写入指定文件对象表示的文件,调用第一个方法,根据name创建一个File对象,然后传入第一个构造参数中
FileOutputStream(String name) 创建文件输出流以写入指定文件对象表示的文件,调用上一个构造方法,只不过传入的append为false,表示不追加写入,而是从开头覆盖写入
FileOutputStream(FileDescriptor fdObj) 创建要写入指定文件描述符的文件输出流,该文件描述符表示与文件系统中实际文件的现有连接,这是根据描述符创建文件输出流

操作方法

方法名 作用
native void open0(String name, boolean append) 原生方法,打开具有指定名称的文件以进行覆盖或追加操作,append为true表示追加,为false表示从头开始覆盖写入
void open(String name, boolean append) 打开具有指定名称的文件以进行覆盖或追加操作,调用上一个原生方法
native void write(int b, boolean append) 原生方法,将指定的字节写入此文件,append为true表示追加写入,为false表示从头开始覆盖写入
void write(int b) 调用上一个原生方法,将指定的字节写入此文件,只不过传入的append是一开始open时传入的值
native void writeBytes(byte b[], int off, int len, boolean append) 原生方法,将子数组字节序列的写入此文件,off表示从字节数组b的off下标开始,写入len个字节进入文件,append为true表示追加写入,为false表示从头开始覆盖写入
void write(byte b[]) 调用上一个原生方法,将指定字节数组中字节全部写入此文件,传入的off是0,len是字节数组的长度,append是一开始open时传入的值
void write(byte b[], int off, int len) 调用上一个原生方法,从偏移量off开始,将指定字节数组中的len字节写入此文件
final FileDescriptor getFD() 返回与此流关联的文件描述符
FileChannel getChannel() 返回与此文件输出流关联的唯一文件通道FileChannel
void finalize() 该方法由JVM在垃圾回收时自动调用,清除与文件的连接,并确保在不再引用此文件输出流时调用此文件输出流的close方法,在内部调用了close()方法
close0() 原生方法,用于关闭文件输出流
void close() 调用上一个原生方法,关闭此文件输出流并释放与此流关联的所有系统资源, 此文件输出流可能不再用于写入字节,关闭的时候取出文件描述符调用其closeAll方法,此方法会往上递归,把所有与该流关联的流全部关闭
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java FileOutputStream类 的相关文章

随机推荐

  • vue判断上传的文件是否为xls或xlsx

    isexcel file const isXlS file type application vnd openxmlformats officedocument spreadsheetml sheet file type applicati
  • 河道水库测量用雷达水位计的特点

    雷达水位计是一款高精度且具有水面波动滤波处理的地表水水位测量 雨量监测系统 它采用喇叭天线的设计 降低功耗 宽范围的输入电压 专门设计于适合野外无人值守的野外自动站应用 测量不受大气温度 压力 空气密度 风 降水 相对湿度的影响 具有很高的
  • 【web安全】——XXE漏洞快速入门

    作者名 Demo不是emo 主页面链接 主页传送门创作初心 一切为了她座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日emo 该怎么开口呢 今晚天气不错 但还是想你了 目录 一 初识XXE漏洞 1 XXE简介 2 XM
  • paintEvent(QPaintEvent *e)函数参数使用问题

    paintEvent QPaintEvent e 函数参数使用问题 自己重载paint Event 函数时是不用使用参数的 但是为了保证系统调用自己写的重载函数必须自己写的重载函数和系统的函数完全一样 所以必须这么写 void XVideo
  • 嵌入式学习手册1-什么是嵌入式

    嵌入式学习手册1 什么是嵌入式 一 嵌入式发展概述 在传统的开发过程中 都是软件直接操控硬件 软件和硬件完全耦合在一起 导致了以下问题 1 软件的移植性差 2 软件开发人员必须懂硬件 开发难度过大 3 软件功能性差 影响用户体验 因为20世
  • 杯子

    杯子 题目描述 小明买了N个容积可以是无穷大的杯子 刚开始的时候每个杯子里有1升水 接着小明发现杯子实在太多了 于是他决定保留不超过K个杯子 每次他选择两个当前含水量相等的杯子 把一个杯子的水全部倒进另一个里 然后把空瓶丢弃 不能丢弃有水的
  • 系统烧写方法(MfgTool烧写工具)

    目录 MfgTool 工具简介 MfgTool 工作原理简介 USB接线 系统烧写原理 烧写NXP 官方系统 烧写自制的系统 系统烧写 网络开机自启动设置 改造我们自己的烧写工具 改造MfgTool 烧写测试 解决Linux 内核启动失败
  • JDK8新特性----lambda表达式

    一 Lambda表达式 1 Lambda表达式 注意 函数式接口 接口中只有一个抽象方法 参数1 参数2 抽象方法的参数 gt 分隔符 表示抽象方法的实现 1 lambda基本用法 package com wt practice lx01
  • Java 反射机制(二)

    前言 在上篇 Java 反射机制 一 介绍了一些 Java 反射相关的常用 API 在知道了如何去使用反射之后 作为一个合格的工程师 下一步肯定是要去了解它的如何实现的 我们今天就来看看在 JDK 源码中是如何去实现反射的 PS 以下源码分
  • docker查看mysql日志_如何查看docker运行日志

    查看docker运行日志的方法介绍 docker attach命令 docker attach options 容器会连接到正在运行的容器 然后将容器的标准输入 输出和错误流信息附在本地打印出来 命令中options的取值有三种 detac
  • 护网蓝队(初级)

    护网蓝队 初级 主要是会看各种攻击payload 注意常见的payload 练习各种漏洞的利用方法 学会看利用漏洞的请求长什么样 payload长什么样 payload长什么样 给个请求包 能不能认出来是攻击流量 是的话是什么漏洞的利用 蓝
  • 树09--二叉树的下一个结点

    树09 二叉树的下一个结点 jz57 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 给定一个二叉树其中的一个结点 请找出中序遍历顺序的下一个结点并且返回 注意 树中的结点不仅包含左右子结点 同时包含指向父结点的next指针
  • Qt 信号连接多个槽函数 执行顺序

    执行顺序 同一信号连接多个槽呢 槽函数执行没有绝对的先后顺序 如 connect slider QSlider valueChanged spin box QSpinBox setValue connect slider QSlider v
  • 读研期间小论文投稿-个人总结

    我是2014级研究生 学校只是一个普通211 而且工科很弱 导师对我是放养 让我回忆下 上学期就见过她一次 而且她快退休了 没项目没经费没权利 但我觉得跟着她还挺好 因为我可以自己研究自己喜欢的 没人妨碍 但同时导师没有基金 所以我的小论文
  • 两个linux服务器间复制文件

    scp是secure copy的简写 用于在Linux下进行远程拷贝文件的命令 和它类似的命令有cp 不过cp只是在本机进行拷贝不能跨服务器 1 命令格式 scp 参数 原路径 目标路径 2 命令实例 从本地服务器复制到远程服务器 1 复制
  • Vue使用Swiper看这一篇就够了

    Vue使用Swiper看这一篇就够了 此案例实现需求 完成swiper动态异步数据下的slide渲染 自定义分页器样式 解决loop true设置时的事件丢失问题 swiper鼠标移入 移出 暂停 开始轮播 单页面渲染多个swiper组件互
  • 什么是区块链概念

    区块链到底有什么价值 区块链技术被称为价值互联网 大体上原因在于它解决了原有互联网的三个基本问题 第一 区块链通过在数字货币领域的应用 提供了资金流 或者叫资本流 信息在互联网的流动的解决方案 第二 区块链通过加密和分布式账本的引用 解决了
  • 关于Visual Studio 不支持x64 内联汇编分析

    记录一下今天的大坑 实在是有必要记录一下 调程序发现参数在函数传递时 出现了异常的值 已经确认不是指针破坏的问题 用汇编看了下 发现汇编寄存器地址都取错了 在release开启o2优化时出现 关掉又正常 实在是百思不得其解 对于内联汇编 其
  • Mysql根据拼音首字母分组和排序

    最近业务上有个需求 需要根据英文字母展示对应的人名 和我们手机的通讯录差不多 如下图所示 通常如果表设计的时候增加了对应的首字母字段应该很好实现 那如果没加 应该怎么实现呢 图示Sql SELECT name ELT INTERVAL CO
  • Java FileOutputStream类

    文章目录 总结 FileOutputStream类数据结构 FileOutputStream类方法 构造方法 操作方法 总结 FileOutputStream类用于将数据写入文件或文件描述符的输出流 FileOutputStream用于写入