美文网首页
*字节流与字符流2(OutputStream)

*字节流与字符流2(OutputStream)

作者: 秋笙fine | 来源:发表于2019-01-29 16:55 被阅读0次

    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类完成。

    相关文章

      网友评论

          本文标题:*字节流与字符流2(OutputStream)

          本文链接:https://www.haomeiwen.com/subject/jcbxsqtx.html