OutputStream 本身是一个抽象类,这样就需要一个子类。如果要进行文件操作,则可以使用FileOutputStream 子类完成操作,此类定义的常用方法如图所示。
由于输出操作主要以 OutputStream 类为主,所以对于 FileOutputStream 只需要关注其常用的两个构造方法即可。读者可以通过图11-5 理解 FileOutputStream 类的继承结构。
提示:异常问题。
如果读者细心观察可以发现,在 OutputStream 类中定义的方法都使用了throws 抛出异常,因为流属于资源操作,所以任何操作都不一定确保可以正常完成,不仅是流操作,而且后面章节讲解的网络操作、数据库操作里面所使用的方法绝大部分也都会抛出异常本书为了编写需要,会在主方法上直接使用 throws 抛出异常,而在实际开发中,读者一定要记住,主方法一定要处理异常,不能抛出。
import java.io.File;
import java.io.FileOutputStream;
import java.io.QutputStream:
public class TestDemo {
public static void main(Stringl] args) throws Exception { //直接抛出
//1.定义要输出文件的路径
File file = new File("d:"+ File separator + "demo" + File.separator+ "midn.txt");
//此时由于目录不存在,所以文件不能输出,应该首先创建目录
if (!file.getParentFile().exists()) { //文件目录不存在
file.getParentFile0 mkdirs() //创建目录
}
//2.应该使用 OutputStream 和其子类进行对象的实例化,此时目录存在,文件还不存在
OutputStream output=newFileOutputStream(file);
// 字节输出流需要使用byte 类型,需要将String类对象变为字节数组
String str="更多课程资源请访问:www.yootk.com";
byte datal=strgetBytes(); //将字符串变为字节数组
output.write(data); //3.输出内容
output.close(); //4.资源操作的最后一定要进行关闭
}
}本程序严格按照流的操作步骤进行,并且在程序执行前指定的文件路径并不存在,为了保证程序可以正常执行,需要先创建对应的父路径,再利用FileOutputStream 类对象为 OutputStream 父类实例化,这样 write0方法输出时就表示向文件中进行输出。由于 OutputStream 只适合输出字节数据,所以需要将定义的字符串利用 getBytes0方法转换为字节数组后才可以完成操作。
提示:关于追加操作。
如果重复执行范例 11-7 的代码会发生文件内容的覆盖,而如果要实现文件的追加可以使用另外一个 FileOutputStream(类的构造方法(public FileOutputStream(Filefile .boolean append)).
范例 11-8:文件追加。
//2.应该使用 OutputStream 和其子类进行对象的实例化,此时目录存在,文件还不存在OutputStream output=new FieQutputStream(file, true);本程序使用了追加模式,这样每次执行完程序都会向文件中不断追加新的操作。
范例 11-7的程序是将整个字节数组的内容进行了输出。同时可以发现一个问题:利用 OutputStream向文件输出信息时如果文件不存在,则会自动创建(不需要用户手工调用 createNewFile0方法)。对于输出操作在整个 OutputStream 类里面一共定义了三个方法,下面来看一下其他两种输出方法(为方便操作,本处只列出代码片断)。
采用单个字节的方式输出(此处可以利用循环操作输出全部字节数组中的数据)。
for (int x=0 ; x< data.length; x ++){
output.write(data[x])://内容输出
}输出部分字节数组内容(设置数组的开始索引和长度)。
output.write(data.6.6); //内容输出虽然在 OutputStream 类中定义了3种操作,但是从实际的开发来讲,输出部分字节数组操作(public void write(bytelb,int off,int len))是实际工作中使用较多的方法,所以一定要重点掌握此方法的使用。