正文

IOStream用法2005-09-16 19:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/4833.html

分享到:

/*
I/O流的层次
 1.字节流 2.字符流 3.对象流 4.其它

 详细介绍:
---------------------------------------
1.字节流:

 从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。
 ◇ InputStream、OutputStream
 ◇ FileInputStream、FileOutputStream
 ◇ PipedInputStream、PipedOutputStream
 ◇ ByteArrayInputStream、ByteArrayOutputStream
 ◇ FilterInputStream、FilterOutputStream
 ◇ DataInputStream、DataOutputStream
 ◇ BufferedInputStream、BufferedOutputStream
---------------------------------------
InputStream 和OutputStream

InputStream 和OutputStream 是其他字节流的父类,他是一个抽象类,各有一个抽象方法:
abstract int read()和abstract write(int b);

 InputStream:

  ◇ 从流中读取数据:

   int read( ); //读取一个字节,返回值为所读的字节

   int read( byte b[ ] ); //读取多个字节,放置到字节数组b中,通常
        //读取的字节数量为b的长度,返回值为实际
        //读取的字节的数量

   int read( byte b[ ], int off, int len ); //读取len个字节,放置
             //到以下标off开始字节
             //数组b中,返回值为实
             //际读取的字节的数量

   int available( );   //返回值为流中尚未读取的字节的数量

   long skip( long n ); //读指针跳过n个字节不读,返回值为实际
               //跳过的字节数量
  
  ◇ 关闭流:

   close( ); //流操作完毕后必须关闭
   
  ◇ 使用输入流中的标记:

   void mark( int readlimit ); //记录当前读指针所在位置,readlimit
          //表示读指针读出readlimit个字节后
          //所标记的指针位置才失效

   void reset( );     //把读指针重新指向用mark方法所记录的位置

   boolean markSupported( ); //当前的流是否支持读指针的记录功能


 OutputStream:
  ◇ 输出数据:
   void write( int b );   //往流中写一个字节b
 
   void write( byte b[ ] ); //往流中写一个字节数组b
 
   void write( byte b[ ], int off, int len ); //把字节数组b中从
                //下标off开始,长度为len的字节写入流中
  
  ◇ flush( )       //刷空输出流,并输出所有被缓存的字节
        //由于某些流支持缓存功能,该方法将把
        //缓存中所有内容强制输出到流中。
 
   ◇ 关闭流:
     close( );       //流操作完毕后必须关闭

---------------------------------------
FileInputStream和FileOutputStream

类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打
开本地主机上的文件,并进行顺序的读/写。例如,下列的语句段是顺序读取文件名为text的
文件里的内容,并显示在控制台上面,直到文件结束为止。
*/
//程序 1:

import java.io.*;
import javax.swing.*;

public class FileInputStreamDemo
{
 public static void main(String[] args)
 {
  try
  {
   JFileChooser chooser = new JFileChooser();
   int status = chooser.showOpenDialog(null);
   if (status == JFileChooser.APPROVE_OPTION)
   {
    File file = chooser.getSelectedFile();
    FileInputStream fis = new FileInputStream (file);
    System.out.println ("The content of text is:");
    int b;
    while ((b = fis.read())!=-1)//顺序读取文件text里的内容并赋值
           //给整型变量b,直到文件结束为止。

    {
     System.out.print((char)b);
    }
    fis.close();
   }
  }
  catch(FileNotFoundException e)
  {
   System.out.println(e);
  }
  catch(IOException e)
  {
   System.out.println(e);
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
 }
}

/*
---------------------------------------
RandomAccessFile

对于InputStream 和OutputStream 来说,它们的实例都是顺序访问流,也就是说,只能对文件进行
顺序地读/写。随机访问文件则允许对文件内容进行随机读/写。在java中,类RandomAccessFile 提
供了随机访问文件的方法。

  类RandomAccessFile的声明为:
  public class RandomAccessFile extends Object implements DataInput, DataOutput
  
  接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定
  长度的字节数。如:readBoolean( )、readInt( )、readLine( )、readFully( ) 等。
 
   接口DataOutput 中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。
  如:writeChar( )、writeDouble( )、write( ) 等。 下面详细介绍RandomAccessFile类中的方法。

  ◇ 构造方法:

  RandomAccessFile(String name,String mode); //name是文件名,mode
       //是打开方式,例如"r"表示只读,"rw"表示可读写,"

  RandomAccessFile(File file,String mode); //file是文件对象

  ◇ 文件指针的操作

  long getFilePointer( ); //用于得到当前的文件指针

  void seek( long pos ); //用于移动文件指针到指定的位置

  int skipBytes( int n ); //使文件指针向前移动指定的n个字节
  
------------------------------------------------------------
过滤流FilterInputStream和FilterOutputStream
过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以
访问一个I/O流,以防止多个线程同时对一个I/O流进行操作所带来的意想不到的结果。
类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类。

为了使用一个过滤流,必须首先把过滤流连接到某个输入/出流上,通常通过在构造方法的参数中指定所
要连接的输入/出流来实现。例如:

 FilterInputStream( InputStream in );
 FilterOutputStream( OutputStream out );

 几种常见的过滤流
  ◇ BufferedInputStream和BufferedOutputStream
   缓冲流,用于提高输入/输出处理的效率。

   ◇ DataInputStream 和 DataOutputStream
   不仅能读/写数据流,而且能读/写各种的java语言的基本类型,如:boolean,int,float等。

   ◇ LineNumberInputStream
   除了提供对输入处理的支持外,LineNumberInputStream可以记录当前的行号。

   ◇ PushbackInputStream
   提供了一个方法可以把刚读过的字节退回到输入流中,以便重新再读一遍。

   ◇ PrintStream
   打印流的作用是把Java语言的内构类型以其字符表示形式送到相应的输出流。

 

*/
/*
进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。
如:FileNotFoundException, EOFException, IOException
*/


/*
-----------------------------------
2.字符流:

 从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。
 ◇ Reader、Writer
 ◇ InputStreamReader、OutputStreamWriter
 ◇ FileReader、FileWriter
 ◇ CharArrayReader、CharArrayWriter
 ◇ PipedReader、PipedWriter
 ◇ FilterReader、FilterWriter
 ◇ BufferedReader、BufferedWriter
 ◇ StringReader、StringWriter

------------------------------------
3.对象流

 ◇ ObjectInputStream、ObjectOutputStream

4.其它

 ◇ 文件处理:
 File、RandomAccessFile;

 ◇ 接口
 DataInput、DataOutput、ObjectInput、ObjectOutput;

 

 

阅读(5470) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册