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

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

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

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

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

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

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

InputStream

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

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

OutputStream

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

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

Reader

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

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

Writer

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

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

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

FileInputStream和FileOutputStream用法

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

import java.io.*;

public class IOtest {

    public static void main(String[] args)
{
int b=0;
FileInputStream in=null;
FileOutputStream out=null;
try {
in=new FileInputStream("g:/1.txt");
out=new FileOutputStream("g:/2.txt");
while((b=in.read())!=-1)//in.read()不为-1说明还未访问完输入流
{
out.write(b);//按照字节写入
}
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
} }
}

FileReader和FileWriter用法

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

import java.io.FileReader;
import java.io.FileWriter; public class Reader_writer { public static void main(String[] args) {
int c=0;
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader("g:/1.txt");
fw=new FileWriter("g:/2.txt");
while((c=fr.read())!=-1)
{
fw.write(c);
}
fr.close();
fw.close();
} catch (Exception e) { }
} }

BufferInputStream套接FileInputStream用法

import java.io.BufferedInputStream;
import java.io.FileInputStream; public class BufferInputStream { public static void main(String[] args) {
// TODO Auto-generated method stub try {
FileInputStream fis=new FileInputStream("g:/1.txt");
BufferedInputStream bis=new BufferedInputStream(fis);//对象流
int c=0;
System.out.println(bis.read());
System.out.println(bis.read());
bis.mark(0);//标记位置0
for(int i=0;i<10&&(c=bis.read())!=-1;i++)
{
System.out.println((char)c+" ");
} bis.reset();//回到标记位置,即位置0
for(int i=0;i<10&&(c=bis.read())!=-1;i++)
{
System.out.println((char)c+" ");
}
bis.close();
} catch (Exception e) {
// TODO: handle exception
} } }

未完待续

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. JQuery 同时获取多个标签的指定内容并储存为数组

    在网页开发中经常会碰到获取同种类型的 标签 的值得问题,比如下面的两种情况. 当需要批量获取同种标签的指定值时,新人就会碰上一点小麻烦. 比如 id=problem1的demo var list1=$ ...

  2. jquery实现复选框的全选、全不选、反选

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. MySQL数据库实验:任务二 表数据的插入、修改及删除

    目录 任务二 表数据的插入.修改及删除 一.利用界面工具插入数据 二.数据更新 (一)利用MySQL命令行窗口更新数据 (二)利用Navicat for MySQL客户端工具更新数据 三.数据库的备份 ...

  4. 如何从SAP ECC中抽取簇表数据

    打开SAP 客户端工具 ABAP 中 创建包(SE80) 创建函数组 展开ABAP 工作台,双击ABAP Dictionary 字典: 选择第三个data type,输入数据结构名称ZSQL_CLAU ...

  5. Python学习:19.Python设计模式-单例模式

    一.单例模式存在的意义 在这里的单例就是只有一个实例(这里的实例就像在面向对象的时候,创建了一个对象也可以说创建了一个实例),只用一个实例进行程序设计,首先我们可以了解一下什么时候不适合使用单例模式, ...

  6. C语言简易三子棋

    这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include&l ...

  7. 在Titanic数据集上应用AdaBoost元算法

    一.AdaBoost 元算法的基本原理 AdaBoost是adaptive boosting的缩写,就是自适应boosting.元算法是对于其他算法进行组合的一种方式. 而boosting是在从原始数 ...

  8. OpenFlow1.3.3 学习记录(持续更新)

    OpenFlow1.3.3 学习记录(持续更新) 正在学习OpenFlow1.3,该篇笔记将日常更新,主要内容大致为官方文档的总结与翻译. 交换机组件 按照优先级顺序进行包匹配,如果匹配到流表项,则执 ...

  9. LVS入门篇(三)之LVS的工作模式和调度算法

    1.NAT模型 (1)原理图: ①.客户端(200.10.10.1)将请求发往前端的负载均衡器(114.100.80.10),请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP ...

  10. Nginx入门篇(四)之常用配置解析

    1.Nginx状态信息功能 Nginx的模块当中有一个ngx_http_stub_status_module模块,这个模块主要记录Nginx的基本访问信息,要使用该模块,需要在编译的时候增加http_ ...