字节流与字符流(字节输出流:OutputStream)
Java.io.OutputStream 介绍
如果想要通过程序进行内容的输出,则可以使用
Java.io.OutputStream类,
那么首先来观察这类的定义结构:
Public abstact class OutputStream
Extends Object
Implements Closeable,Flushable
可以发现OutputStream类实现了Closeable,Flushable两个接口,这两个接口里面有各自的方法;
Closeable:
public void close() throw IOException;
Flushable:
public void flush() throw IOException;
而在OutputStream类里面实际上还定义有其他方法
- 将给定的字节数组内容全部输出:
public void write(byte[ ] b) throws IOException;
- 将部分的字节数组内容输出:
public void write (byte[ ] b ,int off , int len) throws IOException;
- 输出单个字节:
public abstract void write (int b) throws IOException;
但是OutputStream是一个抽象类,所以按照抽象类的原则来讲,如果要想为父类实例化,那么就需要使用子类。
因为方法和名称都已经被父类定义好了,所以此处我们所关注的只是子类的构造方法。如果要进行文件的操作,
可以使用FileOutputStream类来处理,这个类的构造:
- 接受File类(覆盖):
public FileOutputStream(File file) throws FileNotFoundException;
- 追加内容:
public FileOutputStream(File file, Boolean append) throws
FileNotFoundException;
范例:实现文件的内容输出
public class TestDemo{
public static void main (String[]args) throws Exception {
File file = new File("d:"+File.separator + "hello.txt");//1,通过File类定义文件路径
if (!file.getParentFile().exist()){//必须保证父目录存在
file.getParentFile().mkdirs();//创建目录
}
//2.OutputStream是一个抽象类,所以需要通过子类进行实例化,意味着只能进行文件处理
OutputStream output=new FileOutputStream(file);
//3、进行文件的输出处理
String msg="www.mldn.cn";//这个是要求输出内容
output.write(msg.getBytes());//将内容变为字节数组
//4、关闭输出
output.close();}}
在进行输出的时候所有的文件会自动帮助用户创建,不再需要编写creatNewFile()方法手工创建了。
这个时候的程序如果重复执行实际上并不会出现追加的情况,因为默认的状态就是覆盖的重复输出,
所以如果要追加内容,需要更换FileOutputStream类的构造方法:
OutputStream output=new FileOutputStream(file,true);
如果要换行则在字符串的最后追加“\r\n”。如果要部分输出则更换 write()方法:
Output.wirte(msg.getBytes(),0,3);// 将内容变为字节数组
整个的输出流程和之前面向对象所学习到的操作模式是完全相同的,唯一的区别是FileOutputStream类里面多了一些文件内容的操作支持。