java.io包中定义了多个流类型来实现输入输出功能,以不同的角度进行分类:

  按数据流的方向不同可以分为输入流和输出流

  按处理数据单位不通可以分为字节流和字符流

  按照功能不同可以分为节点流和处理流

所有流类型位于包java.io内都分别继承自一下四种抽象流类型

节点流可以从一个特定的数据源读写数据

处理流是“”连接“”在已存在的流之上,通过对数据的处理为程序提供更为强大的读写功能

InputStream

继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)

下图中深色为节点流、浅色为处理流

OutputStream

继承自OutputStream的流都是用于程序中输入数据,且数据的单位为字节(8bit)

下图中深色为节点流、浅色为处理流

Reader

继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit)

下图中深色为节点流、浅色为处理流

Writer

继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16bit)

下图中深色为节点流、浅色为处理流

几个程序小例子来阐明具体用法:

FileInputStream和FileOutputStream用法

FileInputStream和FileOutputStream是字节流,只能单个字节传递,而汉字是双字节的,所以不能识别汉字

  1. import java.io.*;
  2.  
  3. public class IOtest {
  4.  
  5. public static void main(String[] args)
  6. {
  7. int b=0;
  8. FileInputStream in=null;
  9. FileOutputStream out=null;
  10. try {
  11. in=new FileInputStream("g:/1.txt");
  12. out=new FileOutputStream("g:/2.txt");
  13. while((b=in.read())!=-1)//in.read()不为-1说明还未访问完输入流
  14. {
  15. out.write(b);//按照字节写入
  16. }
  17. in.close();
  18. out.close();
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22.  
  23. }
  24. }

FileReader和FileWriter用法

FileReader和FileWriter是字符流,可以传递汉字

  1. import java.io.FileReader;
  2. import java.io.FileWriter;
  3.  
  4. public class Reader_writer {
  5.  
  6. public static void main(String[] args) {
  7. int c=0;
  8. FileReader fr=null;
  9. FileWriter fw=null;
  10. try {
  11. fr=new FileReader("g:/1.txt");
  12. fw=new FileWriter("g:/2.txt");
  13. while((c=fr.read())!=-1)
  14. {
  15. fw.write(c);
  16. }
  17. fr.close();
  18. fw.close();
  19. } catch (Exception e) {
  20.  
  21. }
  22. }
  23.  
  24. }

BufferInputStream套接FileInputStream用法

  1. import java.io.BufferedInputStream;
  2. import java.io.FileInputStream;
  3.  
  4. public class BufferInputStream {
  5.  
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8.  
  9. try {
  10. FileInputStream fis=new FileInputStream("g:/1.txt");
  11. BufferedInputStream bis=new BufferedInputStream(fis);//对象流
  12. int c=0;
  13. System.out.println(bis.read());
  14. System.out.println(bis.read());
  15. bis.mark(0);//标记位置0
  16. for(int i=0;i<10&&(c=bis.read())!=-1;i++)
  17. {
  18. System.out.println((char)c+" ");
  19. }
  20.  
  21. bis.reset();//回到标记位置,即位置0
  22. for(int i=0;i<10&&(c=bis.read())!=-1;i++)
  23. {
  24. System.out.println((char)c+" ");
  25. }
  26. bis.close();
  27. } catch (Exception e) {
  28. // TODO: handle exception
  29. }
  30.  
  31. }
  32.  
  33. }

未完待续

03 JAVA IO的更多相关文章

  1. java io系列01之 "目录"

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  2. Java IO设计模式(装饰模式与适配器模式)

    01. 装饰模式 1. 定义 Decorator装饰器,就是动态地给一个对象添加一些额外的职责,动态扩展,和下面继承(静态扩展)的比较.因此,装饰器模式具有如下的特征: 它必须持有一个被装饰的对象(作 ...

  3. java io系列08之 File总结

    本文对File的API和常用方法进行介绍. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_08.html File 介绍 File 是“文件”和“目 ...

  4. java io系列12之 BufferedInputStream(缓冲输入流)的认知、源码和示例

    本章内容包括3个部分:BufferedInputStream介绍,BufferedInputStream源码,以及BufferedInputStream使用示例. 转载请注明出处:http://www ...

  5. java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例

    本章内容包括3个部分:BufferedOutputStream介绍,BufferedOutputStream源码,以及BufferedOutputStream使用示例. 转载请注明出处:http:// ...

  6. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

    前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会 ...

  7. [19/03/29-星期五] IO技术_File(文件)类(可操作文件,不能操作其里边内容,位于Java.io 包中)&递归遍历

    一.概念 java.io.File类:代表文件和目录. 在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到本类. 以pathname为路径创建File对象,如果pathname是相对路 ...

  8. [Java IO]02_字节流

    概要 字节流有两个核心抽象类:InputStream 和 OutputStream.所有的字节流类都继承自这两个抽象类. InputStream 负责输入,OutputStream 负责输出. 字节流 ...

  9. java io系列16之 PrintStream(打印输出流)详解

    本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:htt ...

随机推荐

  1. Linux系统Java环境配置

    1.卸载Linux系统自带的JDK java -version rpm -qa | grep -i java 我们要删除掉自带的JDK环境 rpm -e --nodeps java-1.6.0-ope ...

  2. python django web 端文件上传

    利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现. 第一步:在模板文件中,创建一个f ...

  3. 【非原创】Game23

    #include<stdio.h>int main(){ int n,m,x=0,flag=0; scanf("%d%d",&n,&m); x=m/n; ...

  4. 从网上下载小说_keywords:python、multiprocess

    # -*- coding: utf-8 -*- __author__ = "YuDian" from multiprocessing import Pool # Pool用来创建进 ...

  5. 20155222 2016-2017-2 《Java程序设计》第3周学习总结

    20155222 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 要产生对象必须先定义类,类是对象的设计图,对象是类的实例. 数组一旦建立,长度就固定了. 字 ...

  6. 20155332 mybash的实现

    mybash 的实现 码云链接 https://gitee.com/bestiisjava2017/laura5332/blob/master/%E4%BF%A1%E6%81%AF%E5%AE%89% ...

  7. Deep Learning 教程翻译

    Deep Learning 教程翻译 非常激动地宣告,Stanford 教授 Andrew Ng 的 Deep Learning 教程,于今日,2013年4月8日,全部翻译成中文.这是中国屌丝军团,从 ...

  8. [POI2011]MET-Meteors

    题面 题解 首先我们尝试暴力,那么就对每个点二分一下即可. 我们发现单独二分复杂度太高,而且有些地方很浪费,如求前缀和等. 那么我们就想,能否将它们合并在一起二分呢? 于是就有了整体二分 整体二分即可 ...

  9. 1135: [POI2009]Lyz

    1135: [POI2009]Lyz https://lydsy.com/JudgeOnline/problem.php?id=1135 分析: hall定理+线段树连续区间的最大的和. 首先转化为二 ...

  10. 1、maven打包 install package deploy区别

    maven package:打包到本项目,一般是在项目target目录下.如果a项目依赖于b项目,打包b项目时,只会打包到b项目下target下,编译a项目时就会报错. maven install:打 ...