首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java中的IO源操作大全

2012-09-22 
java中的IO流操作大全JAVA 中的IO流一、流的概念流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管

java中的IO流操作大全

JAVA 中的IO流

一、流的概念
       流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
       一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。
        流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
       实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。        形象的比喻——水流 ,文件======程序 ,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。
二、流的分类
    java.io包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流(node stream),其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。
    Java的常用输入、输出流
java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。 
    Java的字节流
    InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
      Java的字符流
      Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。结合开始所说的输入/输出流 ,出现了个一小框架。

                              字节流                       字符流

      输入流        InputStream               Reader

      输出流        OutputStream            Writer

【案例1】创建一个新文件

运行之后你会在d盘中看见hello.txt.,并且两个文件的内容是一样的,(这是屁话)

 

下面我们使用程序来复制文件吧。

基本思路还是从一个文件中读入内容,边读边写入另一个文件,就是这么简单。、

首先编写下面的代码:

OutputStreramWriter 和InputStreamReader类

整个IO类中除了字节流和字符流还包括字节和字符转换流。

OutputStreramWriter将输出的字符流转化为字节流

InputStreamReader将输入的字节流转换为字符流

但是不管如何操作,最后都是以字节的形式保存在文件中的。

 

将字节输出流转化为字符输出流
BufferedReader buf = new BufferedReader(                new InputStreamReader(System.in));

下面给一个实例:

上面的这个例子测试的是压缩单个文件,下面的们来看看如何压缩多个文件。

接下来看看压缩之后的:

java中的IO源操作大全

大家自然想到,既然能压缩,自然能解压缩,在谈解压缩之前,我们会用到一个ZipFile类,先给一个这个例子吧。java中的每一个压缩文件都是可以使用ZipFile来进行表示的

这个压缩文件还是175字节

解压之后产生:

java中的IO源操作大全

又回到了56字节,表示郁闷。

 

现在让我们来解压一个压缩文件中包含多个文件的情况吧

ZipInputStream类

当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类

解压之后再D盘下会出现一个temp文件夹,里面内容:

java中的IO源操作大全

PushBackInputStream回退流
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable; /** * 序列化一组对象 * */public class SerDemo1{    public static void main(String[] args) throws Exception{        Student[] stu = { new Student("hello",20), new Student("world",30),                new Student("rollen",40) };        ser(stu);        Object[] obj = dser();        for(int i =0; i < obj.length; ++i){            Student s = (Student) obj[i];            System.out.println(s);        }    }     // 序列化    public static void ser(Object[] obj) throws Exception{        File file = new File("d:"+ File.separator + "hello.txt");        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(                file));        out.writeObject(obj);        out.close();    }     // 反序列化    public static Object[] dser()throws Exception{        File file = new File("d:"+ File.separator + "hello.txt");        ObjectInputStream input = newObjectInputStream(new FileInputStream(                file));        Object[] obj = (Object[]) input.readObject();        input.close();        return obj;    }} class Student implements Serializable{    public Student(){     }     public Student(String name, intage){        this.name = name;        this.age = age;    }     @Override    public String toString(){        return "姓名:  " + name +"  年龄:" + age;    }     private String name;    private int age;}
【运行结果】:

姓名:  hello  年龄:20

姓名:  world  年龄:30

姓名:  rollen 年龄:40


原文链接:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html


2楼jeky_zhao昨天 22:05
同赞
1楼cizhibr昨天 20:23
写的不错 赞一个

热点排行