package cn.itcast.day1; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.CharArrayReader; import java.io.CharArrayWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Reader; import java.io.StringBufferInputStream; import java.io.StringReader; @SuppressWarnings("deprecation") public class FileStreamTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //FileOutputStream/FileInputStream File f=new File("test.txt"); FileOutputStream fos=new FileOutputStream(f); String str="FileStream 测试!"; fos.write(str.getBytes()); fos.close(); FileInputStream fis=new FileInputStream(f); byte[] buf=new byte[1024]; int len=fis.read(buf); System.out.println(new String(buf,0,len)); fis.close(); FileWriter fw=new FileWriter(f); fw.write("FileWriter and FileReader 测试!"); fw.close(); FileReader fr=new FileReader(f); char[] frcbuf=new char[1024]; int frlen=fr.read(frcbuf); System.out.println(new String(frcbuf,0,frlen)); fr.close(); //ByteArrayOutputStream/ByteArrayInputStream ByteArrayOutputStream baos=new ByteArrayOutputStream(); baos.write("ByteArrayOutputStream and ByteArrayInputStream 测试!".getBytes()); baos.close(); //关闭无效。 ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray()); byte[] buf3=new byte[1024]; int len2=bais.read(buf3); System.out.println(new String(buf3,0,len2)); //总结:ByteArrayOutputStream实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()和 toString()获取数据 //可以这样理解:ByteArrayOutputStream是用来缓存数据的(数据写入的目标(output stream原义),向它的内部缓冲区写入数据,缓冲区自动增长,当写入完成时可以从中提取数据。由于这个原因,ByteArrayOutputStream常用于存储数据以用于一次写入 //详细理解:http://blog.csdn.net/rcoder/archive/2011/01/05/6118313.aspx CharArrayWriter caw=new CharArrayWriter(); caw.write("CharArrayWriter 测试!"); CharArrayReader car=new CharArrayReader(caw.toCharArray()); char[] carcbuf=new char[1024]; int carlen=car.read(carcbuf); System.out.println(new String(carcbuf,0,carlen)); //总结:与ByteArrayInputStream/ByteArrayOutputStream的区别就是字节导向与字符导向 /// //StringBufferInputStream @SuppressWarnings("deprecation") StringBufferInputStream sbis=new StringBufferInputStream("StringBufferInputStream 测试!"); byte[] buf4=new byte[1024]; int len3=sbis.read(buf4); sbis.close(); System.out.println(new String(buf4,0,len3)); System.out.println(len3); //StringBufferInputStream已过时,用StringReader替代。 StringReader sr=new StringReader("StringReader 测试!"); char[] cbuf=new char[1024]; int len4=sr.read(cbuf); System.out.println(new String(cbuf,0,len4)); //字节导向的stream转换成字符导向的stream File f2=new File("test1.txt"); FileOutputStream fos2=new FileOutputStream(f2); OutputStreamWriter osw=new OutputStreamWriter(fos2); osw.write("97java OutputStreamWriter测试"); osw.close(); FileInputStream fis2=new FileInputStream(f2); InputStreamReader isr=new InputStreamReader(fis2); char[] isrbuf=new char[1024]; int isrlen=isr.read(isrbuf); System.out.println(new String(isrbuf,0,isrlen)); / FileOutputStream fos3=new FileOutputStream("test2.txt"); DataOutputStream dos=new DataOutputStream(fos3); dos.writeUTF("哈哈222222222222xxxxxxxxxxxxxxx"); dos.close(); FileInputStream fis3=new FileInputStream("test2.txt"); DataInputStream dis=new DataInputStream(fis3); String str2=dis.readUTF(); System.out.println(str2); FileOutputStream fos4=new FileOutputStream("test3.txt"); DataOutputStream dos2=new DataOutputStream(fos4); dos2.writeInt(12); dos2.writeFloat((float) 2.5); dos2.writeChars("测试"); dos2.close(); FileInputStream fis4=new FileInputStream("test3.txt"); DataInputStream dis2=new DataInputStream(fis4); int disInt=dis2.readInt(); float disFloat=dis2.readFloat(); char chardis=dis2.readChar(); char chardis2=dis2.readChar(); System.out.println(disInt+" "+disFloat+" "+chardis+""+chardis2); //总结:DataOutputStream与DataInputstream包装OutputStream与InputStream。在读写操作上更加丰富,应用更简便。能直接Write和read各种基本数据类型和字符串 FileOutputStream fos5=new FileOutputStream("test4.txt"); BufferedOutputStream bos=new BufferedOutputStream(fos5); bos.write("你好/n你好".getBytes()); bos.close(); FileInputStream fis5=new FileInputStream("test4.txt"); BufferedInputStream bis=new BufferedInputStream(fis5); int bislen=bis.read(); System.out.println("bislen="+bislen); /* FileWriter fw2=new FileWriter("test4.txt"); fw2.write("大家好/n第二行/n第三行"); fw2.close();*/ FileReader fr2=new FileReader("test4.txt"); BufferedReader br=new BufferedReader(fr2); /* String strbr=""; String strtemp=""; while((strtemp=br.readLine())!=null){ strbr+=(strtemp+"/n"); } System.out.println(strbr);*/ char[] fr2cbuf=new char[1024]; int fr2len=fr2.read(fr2cbuf); System.out.println(new String(fr2cbuf,0,fr2len)); } }