IO流基础知识

字节流

Java中的字节流主要包含两个抽象的流类型:

  • java.io.InputStream 是所有字节输入流的超类(最终父类)
  • java.io.OutputStream 是所有字节输出流的超类

常见子类

  • FileInputStream
  • FileOutputStream
  • ByteArrayInputStream
  • ByteArrayOutputStream
  • BufferedInputStream
  • BufferedOutputStream
InputStream&OutputStream

实例

public class InputStreamDemo {

	public static void main(String[] args) throws IOException {
		
		//获取文件(标准文件)对象
		File f = new File("d:/tempfile/a.txt");
		//根据提供的文件获取一个文件输入流
		InputStream is = new FileInputStream(f);
		int byts = is.available();
		System.out.println("可读字节数:"+byts);
		//声明一个字节数组
		byte[] b = new byte[byts];
		//将流中的所有字节读入字节数组中
		int i = is.read(b);
		
		//将字节数组转换为字符串
		String s = new String(b);
		System.out.println(s);
	}

}

字符流

Java中的字符流主要包含以下两个抽象类型

  • java.io.Reader
  • java.io.Writer

常见子类

  • FileReader
  • FileWriter
  • InputStreamReader
  • InputStreamWriter
  • BufferedReader
  • BufferedWriter
Reader&Writer

实例

public class ReaderDemo {

	/**
	 * 	使用字符流实现文本文档拷贝
	 * 	FileReader
	 * 	FileWriter
	 * @param args
	 */
	public static void main(String[] args)  {
		Reader reader = null;
		Writer writer = null;
		try{
            //声明源文件的字符输入流
			reader = new FileReader("D:\\tempfile\\a.txt");
            //声明目标文件的输出流
			writer = new FileWriter("c:/a.txt");
			//声明字符数组作为缓冲区
			char[] c = new char[50];
			//用于表示真实读取字符数的临时变量
			int len = 0;
            //循环读取流中的字符到字符数组中,并判断是否有读到文件末尾
			while((len = reader.read(c)) != -1) {
                //将字符数组转换为字符串输出
				//String s = new String(c,0,len);
				//System.out.print(s);
                
                //通过字符输出流输出
				writer.write(c, 0, len);
			}
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
                //关闭资源
				if(reader != null) {
					reader.close();
				}
				if(writer != null) {
					writer.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

处理流

节点流

节点流也是低级流,主要用于跟输入输入源直接对接,常见的节点流:

  • FileInputStream
  • FileOutputStream
  • FileReader
  • FileWriter
  • ByteArrayInputStream
  • ByteArrayOutputStream
  • CharArrayReader
  • CharArrayWriter

处理流

处理流也称之包装流,用于将节点流或者其他流进行包装,以提高数据的传输效率或者转换流的类型,常见的处理流:

  • InputStreamReader
  • OutputStreamWriter
  • BufferedInputStream
  • BufferedOutputStream
  • BufferedReader
  • BufferedWriter

转换流&缓冲流

转换流用于字节字符流进行相互转换
实例
字节转字符

public static void main(String[] args) throws IOException {

    //获取标准输入流(字节流)
    InputStream is = System.in;

    //字节流转换为字符流(转换流可以实现字节流和字符流之间的转换;不能转换流向)
    InputStreamReader isr = new InputStreamReader(is,"utf-8");

    //将字符流包装为字符缓冲流(装饰器模式)
    BufferedReader br = new BufferedReader(isr);

    String s = null;
    while((s = br.readLine()) != null) {
        if("quit".equals(s)) {
            System.out.println("bye !!!");
            System.exit(0);
        }
        System.out.println(s);
    }

}

字符转字节

public static void main(String[] args) throws IOException {
    //需要写入文件的内容
    String msg = "长江长江,我是黄河,收到请回答!!!!";
    //目标文件
    File f = new File("d:/tempfile/b.txt");

    //字节输出流
    FileOutputStream fos = new FileOutputStream(f,true);

    //将字节流包装为字符输出流
    OutputStreamWriter osw = new OutputStreamWriter(fos);

    //将字符输出流包装为缓冲字符输出流
    BufferedWriter bw = new BufferedWriter(osw);

    bw.write(msg);
    //使用字符流时需要使用flush将缓冲区的数据强行写入目标输出源
    bw.flush();
    bw.close();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值