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
} } }
未完待续