字节输出流:OutputStream
字节的数据是以byte类型为主实现的操作,在进行字节内容输出的时候可以使用OutPutStream完成,这个类的基本定义如下:
public abstract class OutputStream extends Object implements Closeable, Flushable
首先可以发现这个类实现了两个接口,于是基本的对应关系如下:
OutputStream类定义的是一个公共的输出操作标准,而在这个操作标准里面一共定义有三个内容输出的方法
- 输出单个字节数据:public abstract void write(int b) throws IOException
- 输出一组字节数据:public void write(byte[] b) throws IOException
- 输出部分字节数粗(off-len):public void write(byte[] b, int off, int len) throws IOException 最常用
但是需要注意的一个核心问题在于OutputStream类毕竟是一个抽象类,而这个抽象了如果要想获得实例化对象必须通过子类实例的向上转型。
如果现在进行的是文件处理操作,则可以使用FileOutputStream子类;
因为最终都需要发生向上转型的处理关系,所以对于此时的FileOutputSream子类核心的关注点就可以放在构造方法:
- 【覆盖】构造方法:public FileOutputStream(File file) throws FileNotFoundException
- 【追加】构造方法:public FileOutputStream(File file,boolean append) throws FileNotFoundException
范例:使用OutputSrteam类实现内容的输出(英文不好使用中文代替名字)
package 字节流与字符流;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class OutputStream字节输出流 {
public static void main(String[] args) throws IOException {
File file = new File("F:"+File.separator+"Test"+File.separator+"test.txt"); //1、指定了要操作文件的路径
if(!file.getParentFile().exists()){ //文件不存在
file.getParentFile().mkdirs(); //创建父目录
}
OutputStream outputStream = new FileOutputStream(file); //2、通过子类实例化
String str = "www.baidu.com"; //要输出的文件内容
outputStream.write(str.getBytes()); //3、将字符串变为字节数组并输出
outputStream.close(); //4、关闭资源
}
}
这时F盘下的Test下的test.text文件里面已经有了"www.baidu.com"内容。
本程序采用了最为标准的形式实现了输出的操作处理,并且在整体的处理之中只是创建了文件的父目录,而执行后文件可以自动将帮助用户创建。
提醒:由于OutputStream子类也属于AutoCloseable接口的子类,所以对于colse()方法也可以简化使用,不需要手动开启,用try...cath配合使用即可。
AutoCloseable接口的close()方法用法点这里
范例: 实现自动关闭处理
package 字节流与字符流;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class OutputStream字节输出流 {
public static void main(String[] args) throws IOException {
File file = new File("F:"+File.separator+"Test"+File.separator+"test.txt"); //1、指定了要操作文件的路径
if(!file.getParentFile().exists()){ //文件不存在
file.getParentFile().mkdirs(); //创建父目录
}
try(OutputStream outputStream = new FileOutputStream(file)){//2、通过子类实例化
String str = "www.baidu.com"; //要输出的文件内容
outputStream.write(str.getBytes()); //3、将字符串变为字节数组并输出
}catch (IOException e) {
e.printStackTrace();
}
}
}
每次执行完毕以后在这个文件中都会输出"www.baidu.com",但是会被覆盖(始终只有一个),要想不被覆盖,可以使用追加的构造方法:public FileOutputStream(File file,boolean append) throws FileNotFoundException
package 字节流与字符流;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class OutputStream字节输出流 {
public static void main(String[] args) throws IOException {
File file = new File("F:"+File.separator+"Test"+File.separator+"test.txt"); //1、指定了要操作文件的路径
if(!file.getParentFile().exists()){ //文件不存在
file.getParentFile().mkdirs(); //创建父目录
}
try(OutputStream outputStream = new FileOutputStream(file,true)){//2、通过子类实例化,追加的构造方法
String str = "www.baidu.com"; //要输出的文件内容
outputStream.write(str.getBytes()); //3、将字符串变为字节数组并输出
}catch (IOException e) {
e.printStackTrace();
}
}
}
是否使用自动的关闭处决于项目的整体结构。整个程序里面输出了一组字节数据,但是千万不要忘记了OutputStream类之中定义的输出方法一共有三个。