Java FileOutputStream输出流详解(3种写入方式)

Java FileOutputStream输出流详解(3种写入方式)-mikechen

FileOutputStream 主要是字节流类型的输出流,使用FileOutputStream流可以写入字节数据到目标文件。

什么是FileOutputStream

FileOutputStream是Java标准库提供的最基本的输出流,专用于输出原始字节流如图像数据等,其继承OutputStream类,拥有输出流的基本特性。

 

FileOutputStream继承关系

FileOutputStream继承了OutputStream(字节输出流超类),如下图所示:

Java FileOutputStream输出流详解(3种写入方式)-mikechen

 

1、FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。

2、FileOutputStream(File file, boolean append)创建文件输出流以写入由指定的 File对象表示的文件。

3、FileOutputStream(FileDescriptor fdObj)创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。

4、FileOutputStream(String name)创建文件输出流以指定的名称写入文件。

5、FileOutputStream(String name, boolean append)创建文件输出流以指定的名称写入文件

 

字节流写数据的三种方式:

1.将指定的字节写入此文件输出流,依次写一个字节数据

void write (int b)

2.将b.length字节从指定的字节数组写入此文件输出流,一次写一个数组的数据

void write (byte[] b)

3.将length字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据

void write (byte[] b,int off,int length)

 

FileOutputStream三种写入文件方式,代码如下:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * FileOutputStream三种写入文件方式:
 */
public class FileOutputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        //创建文件输入流 指定写入文件:
        FileOutputStream fos=new FileOutputStream("D:\\mikechen\\jiagou.txt");

        /**
         * 方式一:将指定字节写入文件
         */
        fos.write(97);
        fos.write(98);
        fos.write(99);

        /**
         * 方式二:将指定字节数组写入此文件
         */
        byte[] by={'H','E','L','L','O'};
        fos.write(by);

        /**
         * 方式三:指定片段写入
         */
        //最后一定记得关闭,释放资源
        fos.write(by,1,2);
        fos.close();
    }
}

 

FileOutputStream注意的细节

  • new FileOutputStream 的时候,如果目标文件不存在,那么会先创建目标文件,然后再写入,如果目标文件所在的文件夹不存在,则抛出异常;
  • new FileOutputStream(file) 如果目标文件已经存在,那么会先清空 目标文件的数据,然后再写入新的数据;
  • 写入数据的时候如果需要以追加的形式写入,那么需要使用new FileOutputStream(file,true) 这个构造函数;
  • 使用write(int b)方法的时候,虽然参数接受的一个int类型的数据,但是实际上只会把数据的低八位写出,其他24位丢弃。

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法