03 JAVA IO

时间:2022-02-04 09:22:51

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

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

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

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

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

03 JAVA IO

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

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

InputStream

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

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

03 JAVA IO

OutputStream

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

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

03 JAVA IO

Reader

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

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

03 JAVA IO

Writer

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

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

03 JAVA IO

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

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
} } }

未完待续