OutputStream类是专门进行字节输出的一个类,这个类的定义如下:
public abstract class OutputStream
extends Object
implements Closeable, Flushable
首先可以发现OutputStream类实现了两个接口:
Closeable接口(JDK1.5之后才提供):
public interface Closeable extends AutoCloseable{
public void close() throws IOException
}
最有意思的是在JDK1.7时候引入了一个非常神奇的自动关闭机制AutoCloseable接口:
public interface AutoCloseable{
public void close() throws Exception;
}
然后是Flushable接口:(JDK1.5之后)
public interface Flushable{
public void flush() throws IOException
}
而我们的OutputStream是在JDK1.0之后有的,这个类原本就定义了close与flush方法,所以如上两个接口可以忽略,关注类内方法。
在OutputStream中一共提供有3个输出方法:
输出单个字节:
public abstract void write(int b)
throws IOException
输出全部字节数组:public void write(byte[] b)
throws IOException
输出部分字节数组:public void write(byte[] b,
int off,
int len)
throws IOException
这三个方法里面最重要的是第三个,输出部分字节数组。
OutputStream本身是属于抽象类,如果想为抽象类进行对象的实例化操作,那么一定要使用抽象类的子类,本次由于要进行文件操作,可以使用FileOutputStream子类。在这个子类里面有如下构造方法:
创建/覆盖已有文件
public FileOutputStream(File file)
throws FileNotFoundException
文件内容追加:
public FileOutputStream(File file,
boolean append)
throws FileNotFoundException
使用的最多的是创建或覆盖操作
范例:文件内容的输出
package TestDemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo{
public static void main(String[] args) throws Exception{
//1.定义要输出的文件目录
File file=new File("e:"+File.separator+"demo"+File.separator+"my.txt");
//1.此时由于目录不存在,那么文件不能输出,那么应该首先创建文件目录
if(!file.getParentFile().exists()){
file.getParentFile().mkdir();//创建目录
}
//2.使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在
OutputStream output=new FileOutputStream(file);
//3.要进行文件内容的输出
String str="Good study";
byte data[]=str.getBytes();//将字符串变为字节数组
output.write(data);//将内容输出
//4.关闭资源操作
output.close();
}
}
此时进行了文件内容的输出,并且发现,如果此时要输出的文件不存在,那么会自动进行创建
image.png
可是对于输出操作在OutputStream有三个方法
范例:采用单个字节的方式输出
String str="Good study";
byte data[]=str.getBytes();//将字符串变为字节数组
// output.write(data);//将内容输出
for (int i = 0; i < data.length; i++) {
output.write(data[i]);
}
范例:输出部分字节数组
第二个参数开始点,第三个参数,长度
output.write(data,6,6);//将内容输出
但是每一次都是覆盖不是很好,我们希望内容追加,那么更换OutputStream的构造方法即可。
package TestDemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo{
public static void main(String[] args) throws Exception{
//1.定义要输出的文件目录
File file=new File("e:"+File.separator+"demo"+File.separator+"my.txt");
//1.此时由于目录不存在,那么文件不能输出,那么应该首先创建文件目录
if(!file.getParentFile().exists()){
file.getParentFile().mkdir();//创建目录
}
//2.使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在
OutputStream output=new FileOutputStream(file,true);
//3.要进行文件内容的输出
String str="Good study+\r\n";
byte data[]=str.getBytes();//将字符串变为字节数组
output.write(data);//将内容输出
//4.关闭资源操作
output.close();
}
}
只要是程序要输出内容,都可以利用OutputStream类完成。
网友评论