【输出流中的字节流和字符流】
【OutPutStream和Writer】
[ OutputStream和Writer中包含的方法 ]
void write(int c) 将指定的字节/字符输出到输出流中,其中c既可以是字节,也可是字符
void read( byte[] buf ) / void read( char[] buf ) 将字节/字符数组中的数据输出到指定的输出流中
void read( byte[] buf, int off, int len ) / void read( char[] buf, int off, int len ) 将字节/字符数组中的数据从off位置开始,长度为len的字节/字符输出到输出流中。
[ Writer特有的两个方法(针对String类型的数据) ]
void write( String str ) 将str字符串中包含的字符输出到指定的输出流中
void write( String str, int off, int len ) 将str字符串里从off位置开始,长度为len的字符串输出到指定的输出流中。
【测试1:FileInputStream输入内容,FileOutputStream将内容输出到磁盘】
package com.Higgin.part3; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamDemo { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("c://testJavaIO/aaa.java"); //创建字符输入流 FileOutputStream fos = new FileOutputStream("c://testJavaIO/aaaNew.java"); byte[] bbuf=new byte[1024]; int hasInput=0; while((hasInput=fis.read(bbuf))>0){ //从aaa.java文件中不断取出数据 fos.write(bbuf,0,hasInput); //每读取一次数据,将数据写入输出流 } /* * 直接InputStream.write(String)会出错,下面的fos.write(testStr); * 使用InputStream.write(String.getBytes())处理就可以了!如下就是修改后的fos.write(testStr.getBytes()); */ String testStr="哈哈哈哈哈哈"; fos.write(testStr.getBytes()); //处理过str后就可以将流输出了 fis.close(); fos.close(); } }
【运行前文件位置】
【运行后的结果】
【测试2:FileWriter将String内容输出到磁盘】
package com.Higgin.part3; import java.io.FileWriter; import java.io.IOException; public class FileWriteDemo { public static void main(String[] args) throws IOException { FileWriter fw=new FileWriter("c://testJavaIO/ddd.txt"); fw.write("HigginCui 2016阅读的金庸小说 "); //可以直接将String类型的数据写入Writer类型的输出流中,Writer类特有,OutputStream得先将字符串进行转化为byte[]数组 fw.write("天龙八部 "); fw.write("射雕英雄传 "); fw.write("神雕侠侣 "); fw.write("笑傲江湖 "); fw.close(); } }
【运行后的结果】
【注意】
使用java的IO流执行输出的时候,不要忘记关闭输出流,关闭输出流有以下原因:
1.保证物理流的资源被收回
2.将输出流缓冲区中的数据flush到物理节点中(因为在执行close()方法之前,自动执行flush()方法 )