欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时73:OutputStream字节输出流

程序员文章站 2022-04-15 11:35:56
...

字节输出流:OutputStream

字节的数据以Byte类型为主实现的操作,在进行字节内容输出的时候可以使用OutputStream类完成,这个类的基本定义如下:
public abstract class OutputStream extends Object implements Closeable, Flushable

首先发现这个类继承了两个接口,于是基本的对应关系如下:

Closeable:首先需要知道OutputStream是在JDK1.0时就已经存在的,而Closeable则是在JDK1.5的时候才提出的,而Closeable有继承了AutoCloseable,提供了close()方法

public interface Closeable extends AutoCloseable {
	public void close​() throws IOException;
}

Flushable:此类也是在JDK1.5时提供的,提供了flush()方法

public interface Flushable {
	public void flush​() throws IOException ;
}

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时73:OutputStream字节输出流
OutputStream类定义的是公共的输出操作标准,而在这个操作标准里面一共定义有三个内容输出的方法:

No. 方法名称 类型
1 public abstract void write(int b) throws IOException; 普通 输出单个字节数据
2 public void write(byte b[]) throws IOException; 普通 输出一组字节数据,这也是使用最多的方法
3 public void write(byte b[], int off, int len) throws IOException; 普通 输出部分字节数据

但是需要注意的一个核心问题在于:OutputStream类毕竟是一个抽象类,而这个抽象类如果要想获得实例化对象,按照传统的认识应该通过子类实例的向上转型完成,如果说现在要进行的是文件的处理操作,则可以选用FileOutputStream子类:
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时73:OutputStream字节输出流
因为最终都需要发生向上转型的处理关系,那么对于此时的FileOutputStream子类核心的关注点就可以放在构造方法上了:
【覆盖】构造方法:public FileOutputStream(File file) throws FileNotFoundException;
【追加】构造方法:public FileOutputStream(File file, boolean append) throws FileNotFoundException;

范例:使用OutputStream类实现内容的输出

package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	File file = new File("D:" + File.separator + "hello" +
    File.separator + "mldn.txt") ; 				// 1.指定要操作的文件的路径
    	if (!file.getParentFile().exists()) { 	// 文件不存在
    		file.getParentFile().mkdirs();		 // 创建父目录
    	}
    	OutputStream output = new FileOutputStream(file); // 2.通过子类实例化
    	String str = "www.mldn.cn"; // 要输出 的文件内容
    	output.write(str.getBytes()); // 3.将字符串变为字节数组
    	output.close(); // 4.关闭资源
    }
}

本程序是采用了最为标准的形式实现了输出的操作处理,并且在整体的处理之中,只是创建了文件的父目录,但是并没有创建文件,而在执行后会发现文件可以自动帮助用户创建。另外需要提醒的是,由于OutputStream 子类也属于AutoCloseable接口的子类,所以对于close()的方法也可以简化使用。

范例:自动关闭处理

package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	File file = new File("D:" + File.separator + "hello" +
    		File.separator + "mldn.txt") ; 				// 1.指定要操作的文件的路径
    	if (!file.getParentFile().exists()) { 	// 文件不存在
    		file.getParentFile().mkdirs();		 // 创建父目录
    	}
    	try(OutputStream output = new FileOutputStream(file, true)) {
    		String str = "www.mldn.cn\r\n"; // 要输出 的文件内容
    		output.write(str.getBytes()); // 3。将字符串变为字节数组
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    }
}

是否使用自动的关闭取决于你项目的整体结构,另外还需要提醒大家的是,整个程序中最终是输出了一组的字节数据,但是不要忘记OutputStream类之中定义的输出方法一共有三个,只不过其余的两个使用的机会较少。

相关标签: 阿里Java学习路线

推荐阅读