java中的IO流操作大全
JAVA 中的IO流
一、流的概念流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。二、流的分类
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。
流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。 形象的比喻——水流 ,文件======程序 ,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。
java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。结合开始所说的输入/输出流 ,出现了个一小框架。字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
【案例1】创建一个新文件
运行之后你会在d盘中看见hello.txt.,并且两个文件的内容是一样的,(这是屁话)
下面我们使用程序来复制文件吧。
基本思路还是从一个文件中读入内容,边读边写入另一个文件,就是这么简单。、
首先编写下面的代码:
OutputStreramWriter 和InputStreamReader类整个IO类中除了字节流和字符流还包括字节和字符转换流。
OutputStreramWriter将输出的字符流转化为字节流
InputStreamReader将输入的字节流转换为字符流
但是不管如何操作,最后都是以字节的形式保存在文件中的。
将字节输出流转化为字符输出流
BufferedReader buf =newBufferedReader(newInputStreamReader(System.in));下面给一个实例:
上面的这个例子测试的是压缩单个文件,下面的们来看看如何压缩多个文件。
接下来看看压缩之后的:
大家自然想到,既然能压缩,自然能解压缩,在谈解压缩之前,我们会用到一个ZipFile类,先给一个这个例子吧。java中的每一个压缩文件都是可以使用ZipFile来进行表示的
这个压缩文件还是175字节
解压之后产生:
又回到了56字节,表示郁闷。
现在让我们来解压一个压缩文件中包含多个文件的情况吧
ZipInputStream类当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
解压之后再D盘下会出现一个temp文件夹,里面内容:
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