转载自:http://lavasoft.blog.51cto.com/62575/95387
本文出自 “熔 岩” 博客,转载请与作者联系!
白日依山尽,黄河入海流。 欲穷千里目,更上一层楼。 —— 王之涣《登鹳雀楼》登
import java.io.*; /** * Created by IntelliJ IDEA. * * @author leizhimin 2008-8-27 22:16:44 */ public class TestIOStream { public static void main(String[] args) { testStream(); testBufferedStream(); testSelectStream(); } /** * 字节流测试 */ public static void testStream() { InputStream fis = null; OutputStream fos = null; try { fis = new FileInputStream("C:\\x.txt"); fos = new FileOutputStream("C:\\xcopy.txt"); long num = 0; //读取字节计数 int bt = 0; //每次读入字节内容 //当读入文件末尾时,读入数据的值为-1 //每次读入一个字节,存放到变量bt中,直到读完整个文件 while ((bt = fis.read()) != -1) { // System.out.print(bt); //以数字的形式逐个输出文件的每个字节 System.out.print((char) bt); //以字母的形式逐个输出文件的每个字节 fos.write(bt); //将字节写入输出流中,实现文件的copy功能 num++; } System.out.println("读取的字节数为" + num); fis.close(); fos.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定的文件!"); e.printStackTrace(); } catch (IOException e) { System.out.println("文件读取时发生IO异常!"); e.printStackTrace(); } } /** * 缓冲的字节流测试 */ public static void testBufferedStream() { int buffer = 10; //缓冲大小 try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\x.txt")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\bf2.txt")); int bench = 0; byte bts[] = new byte[buffer]; //创建字节流缓存 while ((bis.read(bts)) != -1) { bos.write(bts); //将字节写入输出流中,实现文件的copy功能 bench++; } System.out.println("bench=" + bench); //将输入流缓冲区中的数据全部写出(千万记住) bos.flush(); bis.close(); bos.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定的文件!"); e.printStackTrace(); } catch (IOException e) { System.out.println("文件读取时发生IO异常!"); e.printStackTrace(); } } /** * 字节流的选择读取测试 */ public static void testSelectStream() { OutputStream fos = null; int buffer = 25; try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\x.txt")); fos = new FileOutputStream("C:\\testSelectStream.txt"); byte bts[] = new byte[buffer]; //创建缓存 //从输入流的第5个字节开始,往后读取10个字节,存放到缓存bts中 //这个方法有个陷阱,缓存buffer的大小最小为“偏移量+要读取字节数”,在次最小应该为15,否则抛IndexOutOfBoundsException异常 bis.read(bts, 5, 10); //将字节写入输出流中,实现文件的copy功能 fos.write(bts); bis.close(); fos.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定的文件!"); e.printStackTrace(); } catch (IOException e) { System.out.println("文件读取时发生IO异常!"); e.printStackTrace(); } } }