java 输入/输出 IO流(4)

来源:互联网 发布:e宠商城淘宝店 编辑:程序博客网 时间:2024/05/22 15:55


1、对于任何编程语言,处理数据的输入、输出操作都占有极其重要的地位。Java语言以流的形式进行数据的输入、输出的处理。按照操作类型,Java语言中的按流向分为输入流和输出流;按传输单位分为字节流和字符流;按功能还可以分为节点流和过滤流。

Java输入、输出I/O流指的是java如何实现与外界数据的交流;这里的输入、输出是针对JVM而言的;字节、字符是针对于输入、输出流处理数据而言的;节点流是负责数据源和程序之间建立连接,过滤流是用于给节点增加功能。

2、流的分类
java.io包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流(node stream),其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。
Java的常用输入、输出流
java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。
 
Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
结合开始所说的输入/输出流 ,出现了个一小框架。
                     字节流                         字符流
输入流        InputStream               Reader
输出流        OutputStream            Writer

3、打印输出字符流

package com.zsc.everyday;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;// 利用 FileReader 来读取文件本身public class FileReaderTest {public static void main(String[] args) throws IOException {FileReader fr = null ;try {fr = new FileReader("d:\\Hello.java");char[] cbuf = new char[512];int len ;while((len=fr.read(cbuf))!=-1){System.out.println(new String(cbuf,0,len));}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(fr!=null){fr.close();}}}}
4、下面利用 FileInputStream 来实现输入,利用FileOutputStream 来实现输出,用以实现文件的复制:

代码:

package com.zsc.everyday;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.sql.Timestamp;//利用 FileInputStream 来实现输入,利用FileOutputStream 来实现输出,用以实现文件的复制public class FileCopy {public static void main(String[] args) throws Exception {FileInputStream fis = null ;FileOutputStream fos = null ;try {//创建字节输入流fis = new FileInputStream("d:\\JDK.6.Documentation.chm");//创建字节输出流fos = new FileOutputStream("d:\\download\\java help.chm");byte[] bbuf = new byte[1024];int len = 0 ;Timestamp start = new Timestamp(System.currentTimeMillis());System.out.println(start);//循环重输入流中读取数据while((len=fis.read(bbuf))!=-1){//每读取一次就将数据写入一次,读了多少就写多少fos.write(bbuf, 0, len);}Timestamp end = new Timestamp(System.currentTimeMillis());System.out.println(end);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{// 利用 finally 关闭输入输出流。finally 是程序必须执行的部分if(fis!=null){fis.close();}if(fos!=null){fos.close();}}}}
运行结果:

2011-12-23 13:29:56.7082011-12-23 13:29:57.372

5、下面使用处理流来包装 OutputStream ,使用处理流后的输出流在输出时更加方便;

代码:

package com.zsc.everyday;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.PrintStream;//使用处理流来包装 OutputStream ,使用处理流后的输出流在输出时更加方便public class PrintStreamTest {public static void main(String[] args) {PrintStream ps = null ;try {//创建一个节点输出流:FileOutputStream FileOutputStream fos = new FileOutputStream("d:\\ss.java");// 一PrintStream 来包装FileOutputStream 输出流ps = new PrintStream(fos);//使用PrintStream 执行输出 ps.println("hello");//直接用PribtStream 输出对象ps.println(new PrintStreamTest());} catch (FileNotFoundException e) {e.printStackTrace();}finally{ps.close();}}}


注意:通常有一个规则,如果需要进行输入输出的内容是文本内容,则应该使用字符流,如果需要输入输出的是二进制流则应该考虑使用字节流。






原创粉丝点击