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. C# 删除指定目录下的所有文件及文件夹

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  2. css之层叠上下文和层叠顺序

    大家在写网页的时候会不会经常遇到莫名奇妙的样式问题,比如谁覆盖了谁.也找不出原因,为什么z-index高的却没有覆盖掉z-index低的元素呢? 带着这些疑问.我做了个小实验.代码如下: <st ...

  3. React学习(一)

    一. 允许HTML和JavaScript代码混写,使用JSX语法:遇到HTML标签就用HTML规则解析,遇到{}的代码块就用js解析 var names = ['Alice', 'Emily', 'K ...

  4. java通过get或post方式传到PHP的某控制器的某方法下

    [java]package test4;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStr ...

  5. hive表查询中文显示乱码

    hive在查询表信息时,中文显示乱码,数字或者url显现null问题解决思路. 1.确定create hive表时指定的row format delimited fields terminated b ...

  6. java->php之在线子域名查询-接口光速版

    因为不懂java,所以 用php重写了大佬的 在线子域名查询-接口光速版 http://sbd.ximcx.cn/  这是大佬的 然后 改一下 ,用php 其实就是改了几行代码而已,jquery和aj ...

  7. [转]IA64与X86-64的区别

    原文:https://www.cnblogs.com/sunbingqiang/p/7530121.html 说到IA-64与x86-64可能很多人会比较陌生.不知道你在下载系统的时候有没有注意过,有 ...

  8. 在Linux Mint 19 / Linux Mint 18上安装VirtualBox 6.0 / 5.2

    如果你直接可以 sudo apt-get install virtualbox-6.0那就相安无事 否则参考https://www.itzgeek.com/how-tos/linux/linux-mi ...

  9. C语言实现可复用栈

    一.思考 最开始写的栈,通过宏来改变元素数据类型,在同一程序中只能用于一种数据类型,想要用于多种数据类型则要复制代码并改名.那么,有没有方法不复制代码就可以用于多种数据类型? 二.基本思路 在我的经验 ...

  10. Makefile:如何写目标依赖

    本文并不是Makefile的教程,仅是本人学习时的感悟. Makefile的基本格式 目标:依赖文件(or 目标) [tab]命令 目标: 是要生成的或操作的命令的索引 依赖: 是生成目标依赖的文件或 ...