Java 日看一类(19)之IO包中的FileOutputStream类

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过 微信版本过低 使用CheatEngine绕过 阅读详情

该类继承自OutputStream

引入了如下包:

import java.nio.channels.FileChannel;
import sun.nio.ch.FileChannelImpl;


类头注释如下:

/**
 * A file output stream is an output stream for writing data to a
 * <code>File</code> or to a <code>FileDescriptor</code>. Whether or not
 * a file is available or may be created depends upon the underlying
 * platform.  Some platforms, in particular, allow a file to be opened
 * for writing by only one <tt>FileOutputStream</tt> (or other
 * file-writing object) at a time.  In such situations the constructors in
 * this class will fail if the file involved is already open.
 *
 * <p><code>FileOutputStream</code> is meant for writing streams of raw bytes
 * such as image data. For writing streams of characters, consider using
 * <code>FileWriter</code>.
 *
 * @author  Arthur van Hoff
 * @see     java.io.File
 * @see     java.io.FileDescriptor
 * @see     java.io.FileInputStream
 * @see     java.nio.file.Files#newOutputStream
 * @since   JDK1.0
 */

大意如下:

文件输出流用于向FIle类或者FileDescriptor类中写入数据

文件是否可用或者是否能被创建取决于底层平台

尤其一些平台,在同一时刻一个文件只允许被一个FileOutputStream流(或者其他文件写入类)写入

在这种情况下,如果指定文件已经被打开,该类的构造方法将失败

FileOutputStream用来写入未被加工过的字节流,如图像数据

如果要写入字符流,推荐使用FileWriter




该类含有如下的成员变量:

文件描述符(系统给的

private final FileDescriptor fd;

判定文件是否为追加打开的(为追加打开则为true

private final boolean append;

文件管道

private FileChannel channel;

文件路径(用文件描述符创建则为空

private final String path;

关闭锁

private final Object closeLock = new Object();

流关闭标志

private volatile boolean closed = false;



含有如下的方法:

构造方法:传入文件路径,默认不关联

public FileOutputStream(String name) throws FileNotFoundException {
    this(name != null ? new File(name) : null, false);
}

构造方法:传入文件路径和关联打开标示

public FileOutputStream(String name, boolean append)
    throws FileNotFoundException
{
    this(name != null ? new File(name) : null, append);
}

构造方法:默认不关联,传入File对象

public FileOutputStream(File file) throws FileNotFoundException {
    this(file, false);
}

核心构造方法:传入File对象和关联标示

public FileOutputStream(File file, boolean append)
    throws FileNotFoundException
{
    String name = (file != null ? file.getPath() : null);//写入文件路径名获取
    SecurityManager security = System.getSecurityManager();//获得安全管理器
    if (security != null) {
        security.checkWrite(name);//检测文件是否能写入
    }
    if (name == null) {
        throw new NullPointerException();
    }
    if (file.isInvalid()) {//路径有效性检查
        throw new FileNotFoundException("Invalid file path");
    }
    this.fd = new FileDescriptor();//初始化
    fd.attach(this);//和该类绑定
    this.append = append;
    this.path = name;

    open(name, append);//打开文件
}

构造函数:创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

public FileOutputStream(FileDescriptor fdObj) {
    SecurityManager security = System.getSecurityManager();
    if (fdObj == null) {
        throw new NullPointerException();
    }
    if (security != null) {
        security.checkWrite(fdObj);//检查该对象能否写入
    }
    this.fd = fdObj;
    this.append = false;
    this.path = null;

    fd.attach(this);
}

native开启函数(应该是调用底层获得文件的打开和写入权限

private native void open0(String name, boolean append)
    throws FileNotFoundException;

native写入函数(文件关联性在构造时就设定好了

private native void write(int b, boolean append) throws IOException;

写入特定字节

public void write(int b) throws IOException {
    write(b, append);
}

native写入字节数组

private native void writeBytes(byte b[], int off, int len, boolean append)
    throws IOException;

将传入的数组全部写入

public void write(byte b[]) throws IOException {
    writeBytes(b, 0, b.length, append);
}

将传入数组的特定部分写入

public void write(byte b[], int off, int len) throws IOException {
    writeBytes(b, off, len, append);
}

关闭输出流并释放该流所占用的系统资源(如果关联了FileChannel也一并关闭)

public void close() throws IOException {
    synchronized (closeLock) {
        if (closed) {
            return;
        }
        closed = true;//修改标识符
    }

    if (channel != null) {//关闭文件频道
        channel.close();
    }

    fd.closeAll(new Closeable() {//关闭文件描述符所关联的文件,并注销描述符(非标准流
        public void close() throws IOException {
           close0();
       }
    });
}

获得文件描述符(存在

public final FileDescriptor getFD()  throws IOException {
   if (fd != null) {
       return fd;
   }
   throw new IOException();
}

返回与该文件输出流连接的FileChannel对象

public FileChannel getChannel() {
    synchronized (this) {
        if (channel == null) {
            channel = FileChannelImpl.open(fd, path, false, true, append, this);
        }
        return channel;
    }
}

关闭所有与该文件的链接并确定close方法被调用

protected void finalize() throws IOException {
    if (fd != null) {//文件描述符还存在(未被注销
        if (fd == FileDescriptor.out || fd == FileDescriptor.err) {//如果是标准输出和错误流,则清空缓冲区
            flush();
        } else {
            /* if fd is shared, the references in FileDescriptor
             * will ensure that finalizer is only called when
             * safe to do so. All references using the fd have
             * become unreachable. We can call close()
             */
            close();
        }
    }
}

关闭并注销该对象

private native void close0() throws IOException;

初始化JNI

private static native void initIDs();

static {
    initIDs();
}



该类也是常用类型,希望大家可以尽量熟悉该类用法和内容

正点原子stm32f103RChal库制作数字秒表:如用keil5和正点原子STM32F1开发板实现? 🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提 阅读详情

相关推荐

DC竞赛 国能日新功率预测题 rank21 解决方案(适合新手)

DataCastle国能日新光伏功率预测 数据异常处 本题在测试集中提供了时间、辐照度、风速、风向、温度、压强、湿度、实发辐照度8个特征,以及标签**实际功率**。 而在训练集中只有前七个特征,无实发辐照度。 策略 在观察了数据之后,我们确定实发辐照度是一个强力特征,于是我们采取了stacking的策略: 1. 第一次训练以实发辐照度为标签,预测 测试集的实发辐照度 2....

yyhhlancelot的博客 7298

Java中FileOutputStream类的使用

想要实现续写(在文件原有数据后面接着写入新的数据),只需要在创建文件输出流对象时传入第二个参数true。此时会显示异常,可点击红色波浪线,使用快捷键alt+回车,选择第一个。下面为续写的完整代码,其余代码基本上只需添加关流即可。每次使用完流之后都要关流,即断开程序与文件之间的链接。即可创建FileOutputStream类对象。想要实现换行写入数据,只需写入换行符即可。一次写入一个字节数组的部分数据。,或者自己添加异常到方法签名。一次写入一个字节数组数据。将数据写入到文件中去。一次写入一个字节数据。

2301_76161469的博客 3090

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

使用keycloak实现SSO单点登录(概念、原理、逻辑、详细步骤、难点解释)

野生猿林仔的博客 2万+

JDK的OutputStream为什么方法write(int b)的入参类型是int呢?

Java的OutPutStream中有一个方法:write(int b)文档里是这么解释的:将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。我怎么觉得这个方法有些奇怪呢。参数是一个int类型的整数,为啥不直接是一个字节呢? 今天在群里有小伙伴提到这个问题...

weixin_33889665的博客 764

保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控加装‘眼睛’,实现自动避障与定高

经过多次测试,前向雷达的最佳安装位置是机架前部下方5-10cm处,倾斜角度20-30度。电源方面,建议为CAN设备单独供电,避免电机启动时的电压骤降导致数据异常。北醒TFmini-i-CAN雷达与PixHawk飞控的组合,为DIY爱好者打开了低成本实现智能避障的大门。实际部署时,需确保整个CAN网络的波特率一致(TFmini-i默认为250kbps),每个设备具有唯一ID。雷达的安装角度也直接影响检测效果,建议通过3D打印支架将雷达向前下方倾斜15-30度。当使用多个雷达时,需为每个设备创建独立的参数组。

weixin_30892889的博客 338

【NCBI】SRA toolkit安装及使用-Windows&Linux版本

由于市面上的文章介绍SRA toolkit基本上都是基于Linux,而在windows下运行SRA toolkit基本上可以达到相同的效果且更为方便,故本文将分别阐明在Windows和Linux环境下SRA toolkit的安装及使用。

weixin_48076899的博客 2万+

Java IO流详解

首先看一张描述输入流和输出流的类层次图。 JavaIOStream 在这里我重点介绍InputStream和OutputStream,从上图可以看到,InputStream和OutputStream是所有字节流输入和输出的父类。 其中两个重要的流是 FileInputStream 和 FileOutputStream: FileInputStream 该流用于从文件读取数据,它的对象可...

演绎的专栏 417

使用ExcelJS向XLSX单元格居中插入图片

本文记录了使用ExcelJS库向XLSX单元格里居中写入图片的方法。本文内容包括:xlsx 文件格式;xlsx 图片定位的长度单位;使用nativeColOff和nativeRowOff进行定位,不要使用官网给的定位方式;添加图片到数据表的总体流程和样例代码;注意事项等。

weixin_43678000的博客 3456

java中的BIO基础-3

java中的io基础

m0_56627229的博客 393

STK之Commu模块之三仿真卫星通信链路参数计算

考虑上述衰减的影响,可以得到卫星接收机输入端的载波功 [C] = [PT] +[GT] +[GR] -[L] -[L1] -[L2] (

juanhuokang2681的博客 8268

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 399

Java IO流之字节流【一】

1.IO 概述 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了。 当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是存储在哪些设备呢?内存、硬盘、外接设备(移动硬盘,U盘)等等。 数据的传输可以看做是数据的流动,按照流动的方向,以内存为基准,分为输入流input 和输出流output ,即流向内存是输入流,流出内存的输出流。 Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。 输入也叫做读取数据,输出也叫

会者定离,一期一祈 1901

游戏大厂如何解析引擎技术

本文系统解析了游戏大厂如何评估和定制游戏引擎。游戏引擎作为游戏开发的核心基础,大厂会从性能、跨平台支持、渲染能力、网络模块等8个维度进行技术解析,通过文档查勘、源码阅读、Demo测试等7个步骤深度评估。解析后通常有三种决策:直接使用、深度定制或自研重构。文章以腾讯、网易、米哈游等为例,展示了不同厂商的引擎定制策略,并分析了技术解析面临的挑战和未来趋势。最终指出,体系化的引擎技术解析是打造高质量游戏的关键,需要持续的技术投入和团队协作。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 535

Java IO流(FileInputStream,FileOutputStream及File)讲解

File类的使用 在介绍流的概念之前,我们需要知道并且明确File和IO流是什么关系。 java.io.File类:文件和目录路径名的抽象表示形式 File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 File对象可以作为参数传递给流的构造函数 File的构造函数 参考在线的jdk文档:https://blog.fondm...

高度不够看到的都是问题,格局太小纠结的都是鸡毛蒜皮。 5947

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java中的io流

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。

m0_66689823的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA中常用IO流类:FileInputStream和FileOutputStream

FileInputStream 用于读取本地文件中的字节数据,继承自InputStream类 构造方法摘要 FileInputStream(File file)            通过打开一个到实际文件的连接来创建一个FileInputStrea

caixiexin的专栏 11万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java基础中的IO流

一、File 类 File 类:文件和目录路径名的抽象表示形式 提供的功能:操作文件外部的能力,不能操作文件内部的内容 能够定义真实存在的路径|文件,不在的也可以定义,所以抽象表现形式 构造器: File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例 File(String pat...

zhiruochujian1的博客 4192

JAVA IO——FileOutputStream

保姆级教学——JAVA IO——FileOutputStream

weixin_59796310的博客 2866

【Java】—— File类与IO流:FileReader\FileWriter、FileInputStream\FileOutputStream

从输入流中读取一些字符,并将它们存储到字符数组 cbuf中,从cbuf[off]开始的位置存储。如果已经到达流末尾,没有数据可读,则返回-1。:从输入流中读取一些字节数,并将它们存储到字节数组 b中,从b[off]开始存储,每次最多读取len个字节。:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。

weixin_63106307的博客 1543

Java FileOutputStream

Java FileOutputStream class is a part of java.io package. Today we will look into FileOutputStream class constructors and methods in detail with example codes. Java FileOutputStream类是java.io包的一部分。 今天,...

从零开始的教程世界 3237

JAVA IO流之FileInputStream类和FileOutputStream类对文件进行读写操作的标准写法

FileInputStream类和FileOutputStream类的学习 JAVA IO流中主要可以分为字节流和字符流。FileInputStream类和FileOutputStream类它们分别是InputStream抽象类和 OutputStream抽象类的实现子类,都属于字节流。 1,FileInputStream简单使用 该类通过字节的方式读取文件,适合读取所有类型的文件(图像、视频) import java.io.File; import java.io.FileInputStream; imp

qq_43804570的博客 1088

Java FileOutputStream getChannel()方法与示例

FileOutputStream类的getChannel()方法 (FileOutputStream Class getChannel() method) getChannel() method is available in java.io package. getChannel()方法在java.io包中可用。 getChannel() method is used to return th...

1457

FileOutputStream类详解

FileOutputStream继承了OutputStream(字节输出流超类) 了解一个类 父类 、构造 、 然后方法 、还有常见异常 public class FileOutputStream extends OutputStream 文件输出流是用于将数据写入到输出流File或一个FileDescriptor 。 文件是否可用或可能被创建取决于底层平台。 特别是某些平台允许一次只能打开一个文件来写入一个FileOutputStream (或其他文件写入对象)。 在这种情况下,如果所涉及的文件

布懂同学开始提问题 1万+

Java IO 中的 FileInputStream 和 FileOutputStream

FileInputStream 和 FileOutputStream:用于文件的字节读写。

yuiezt的专栏 1009

Java中的IO流字节流(FileOutputStream与FileInputStream)+编码与解码

Java中的IO流是用于输入和输出数据的工具。write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符。字节输出流,可以把程序中的数据写到本地文件上,是字节流的基本流。如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。一次读一个字节,读出来的是数据在ASCII上对应的数字。一次读取多个字节数据,具体读多少,跟数组的长度有关。但是这样写对于文件过大的情况,运行的会非常的慢。文件拷贝,编码和解码

m0_46702681的博客 1294

2021.11.17 Java io流 ·FileInputStream类·FileOutputStream类·文件复制

io流 I:input O:output 通过IO可以完成硬盘文件的读和写 IO流的分类 1.按照流的方向,以内存为参照物,往内存中去,叫做输入(读)。从内存中出来,叫做输出(写)。 2.按照读取数据方式不同进行分类: ·有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位。 这种流是万能的,什么类型的文件都可以读取。包括:文本文件、图片、声音文件、视频 假设文件file.txt,采用字符流的话,读流程如下: a中国bc张三 第一次读:‘a’字符(正好读到’a’) 第二次读

qq_43416650的博客 526
上一篇: Java 日看一类(18)之IO包中的FileNameFilter接口类和FileNotFoundException异常类
下一篇: Java 日看一类(20)之IO包中的FilePermission类与FilePermissionCollection类
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值