阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时73:OutputStream字节输出流
字节输出流: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 ;
}
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子类:
因为最终都需要发生向上转型的处理关系,那么对于此时的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类之中定义的输出方法一共有三个,只不过其余的两个使用的机会较少。
上一篇: 100_异常
下一篇: leetcode做题记录0026
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时102:反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时75:Writer字符输出流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第26章:反射与代理设计模式:课时118:动态代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第23章:反射与类操作:课时105:反射调用构造方法(含关系图-重要)
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时82:管道流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时110:属性自动赋值实现思路
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时5:Thread与Runnable关系
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时76:Reader字符输入流