明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

JAVA圖文說(shuō)明教程 第7講 Swing用戶(hù)界面設(shè)計(jì)(二)

[摘要]4.5.2 文件的順序處理   類(lèi)FileInputStream和FileOutputStream用來(lái)進(jìn)行文件I/O處理,由它們所提供的方法可以打開(kāi)本地主機(jī)上的文件,并進(jìn)行順序的讀/寫(xiě)。例如,下列的語(yǔ)句段是順序讀取文件名為text的文件里的內(nèi)容,并顯示在控制臺(tái)上面,直到文件結(jié)束為止。   File...
4.5.2 文件的順序處理

  類(lèi)FileInputStream和FileOutputStream用來(lái)進(jìn)行文件I/O處理,由它們所提供的方法可以打開(kāi)本地主機(jī)上的文件,并進(jìn)行順序的讀/寫(xiě)。例如,下列的語(yǔ)句段是順序讀取文件名為text的文件里的內(nèi)容,并顯示在控制臺(tái)上面,直到文件結(jié)束為止。

  FileInputStream fis;
   try{
    fis = new FileInputStream( "text" );
   System.out.print( "content of text is : ");
     int b;
     while( (b=fis.read())!=-1 ) //順序讀取文件text里的內(nèi)容并賦值
                    給整型變量b,直到文件結(jié)束為止。
     {              
       System.out.print( (char)b );
     }
   }catch( FileNotFoundException e ){
   System.out.println( e );
   }catch( IOException e ){
   System.out.println( e );
   }

  4.5.3 隨機(jī)訪問(wèn)文件

  對(duì)于InputStream 和OutputStream 來(lái)說(shuō),它們的實(shí)例都是順序訪問(wèn)流,也就是說(shuō),只能對(duì)文件進(jìn)行順序地讀/寫(xiě)。隨機(jī)訪問(wèn)文件則允許對(duì)文件內(nèi)容進(jìn)行隨機(jī)讀/寫(xiě)。在java中,類(lèi)RandomAccessFile 提供了隨機(jī)訪問(wèn)文件的方法。類(lèi)RandomAccessFile的聲明為:
  public class RandomAccessFile extends Object implements DataInput, DataOutput

  接口DataInput 中定義的方法主要包括從流中讀取基本類(lèi)型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長(zhǎng)度的字節(jié)數(shù)。如:readBoolean( )、readInt( )、readLine( )、readFully( ) 等。

  接口DataOutput 中定義的方法主要是向流中寫(xiě)入基本類(lèi)型的數(shù)據(jù)、或者寫(xiě)入一定長(zhǎng)度的字節(jié)數(shù)組。如:writeChar( )、writeDouble( )、write( ) 等。 下面詳細(xì)介紹RandomAccessFile類(lèi)中的方法。

  ◇ 構(gòu)造方法:
  RandomAccessFile(String name,String mode); //name是文件名,mode
          //是打開(kāi)方式,例如"r"表示只讀,"rw"表示可讀寫(xiě),"
  RandomAccessFile(File file,String mode); //file是文件對(duì)象

  ◇ 文件指針的操作
  long getFilePointer( ); //用于得到當(dāng)前的文件指針
  void seek( long pos ); //用于移動(dòng)文件指針到指定的位置
  int skipBytes( int n ); //使文件指針向前移動(dòng)指定的n個(gè)字節(jié)

  4.6 過(guò)濾流

   過(guò)濾流在讀/寫(xiě)數(shù)據(jù)的同時(shí)可以對(duì)數(shù)據(jù)進(jìn)行處理,它提供了同步機(jī)制,使得某一時(shí)刻只有一個(gè)線(xiàn)程可以訪問(wèn)一個(gè)I/O流,以防止多個(gè)線(xiàn)程同時(shí)對(duì)一個(gè)I/O流進(jìn)行操作所帶來(lái)的意想不到的結(jié)果。類(lèi)FilterInputStream和FilterOutputStream分別作為所有過(guò)濾輸入流和輸出流的父類(lèi)

   過(guò)濾流類(lèi)層次:


     java.lang.Object
  
   +----java.io.InputStream
  
   +----java.io.FilterInputStream



  為了使用一個(gè)過(guò)濾流,必須首先把過(guò)濾流連接到某個(gè)輸入/出流上,通常通過(guò)在構(gòu)造方法的參數(shù)中指定所要連接的輸入/出流來(lái)實(shí)現(xiàn)。例如:

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

  4.6.1 幾種常見(jiàn)的過(guò)濾流

  ◇ BufferedInputStream和BufferedOutputStream
    緩沖流,用于提高輸入/輸出處理的效率。

  ◇ DataInputStream 和 DataOutputStream
    不僅能讀/寫(xiě)數(shù)據(jù)流,而且能讀/寫(xiě)各種的java語(yǔ)言的基本類(lèi)型,如:boolean,int,float等。

  ◇ LineNumberInputStream
    除了提供對(duì)輸入處理的支持外,LineNumberInputStream可以記錄當(dāng)前的行號(hào)。

  ◇ PushbackInputStream
    提供了一個(gè)方法可以把剛讀過(guò)的字節(jié)退回到輸入流中,以便重新再讀一遍。

  ◇ PrintStream
    打印流的作用是把Java語(yǔ)言的內(nèi)構(gòu)類(lèi)型以其字符表示形式送到相應(yīng)的輸出流。

  4.7 字符流的處理

  java中提供了處理以16位的Unicode碼表示的字符流的類(lèi),即以Reader和Writer 為基類(lèi)派生出的一系列類(lèi)。

  4.7.1 Reader和Writer

   這兩個(gè)類(lèi)是抽象類(lèi),只是提供了一系列用于字符流處理的接口,不能生成這兩個(gè)類(lèi)的實(shí)例,只能通過(guò)使用由它們派生出來(lái)的子類(lèi)對(duì)象來(lái)處理字符流。

  1.Reader類(lèi)是處理所有字符流輸入類(lèi)的父類(lèi)。

  ◇ 讀取字符
  public int read() throws IOException; //讀取一個(gè)字符,返回值為讀取的字符
  public int read(char cbuf[]) throws IOException; /*讀取一系列字符到數(shù)組cbuf[]中,返回值為實(shí)際讀取的字符的數(shù)量*/
  public abstract int read(char cbuf[],int off,int len) throws IOException;
  /*讀取len個(gè)字符,從數(shù)組cbuf[]的下標(biāo)off處開(kāi)始存放,返回值為實(shí)際讀取的字符數(shù)量,該方法必須由子類(lèi)實(shí)現(xiàn)*/

  ◇ 標(biāo)記流
  public boolean markSupported(); //判斷當(dāng)前流是否支持做標(biāo)記
  public void mark(int readAheadLimit) throws IOException;
   //給當(dāng)前流作標(biāo)記,最多支持readAheadLimit個(gè)字符的回溯。
  public void reset() throws IOException; //將當(dāng)前流重置到做標(biāo)記處

  ◇ 關(guān)閉流
  public abstract void close() throws IOException;

  2. Writer類(lèi)是處理所有字符流輸出類(lèi)的父類(lèi)。

  ◇ 向輸出流寫(xiě)入字符
  public void write(int c) throws IOException;
  //將整型值c的低16位寫(xiě)入輸出流
  public void write(char cbuf[]) throws IOException;
  //將字符數(shù)組cbuf[]寫(xiě)入輸出流
  public abstract void write(char cbuf[],int off,int len) throws IOException;
  //將字符數(shù)組cbuf[]中的從索引為off的位置處開(kāi)始的len個(gè)字符寫(xiě)入輸出流
  public void write(String str) throws IOException;
  //將字符串str中的字符寫(xiě)入輸出流
  public void write(String str,int off,int len) throws IOException;
  //將字符串str 中從索引off開(kāi)始處的len個(gè)字符寫(xiě)入輸出流

  ◇ flush( )
  刷空輸出流,并輸出所有被緩存的字節(jié)。

  ◇ 關(guān)閉流
  public abstract void close() throws IOException;

  4.7.2 InputStreamReader和OutputStreamWriter

  java.io包中用于處理字符流的最基本的類(lèi),用來(lái)在字節(jié)流和字符流之間作為中介。

   ◇ 生成流對(duì)象
  public InputStreamReader(InputStream in);
  /*in是字節(jié)流,而InputStreamReader是字符流,但是其來(lái)源是字節(jié)流in,
  因此InputStreamReader就可以把字節(jié)流in轉(zhuǎn)換成字符流處理。/*

  public InputStreamReader(InputStream in,String enc) throws UnsupportedEncodingException;
  /*enc是編碼方式,就是從字節(jié)流到字符流進(jìn)行轉(zhuǎn)換時(shí)所采用的編碼方式,
   例如 ISO8859-1,UTF-8,UTF-16等等*/

  public OutputStreamWriter(OutputStream out);
  /*out是字節(jié)流,而OutputStreamReader是字符流 */

  public OutputStreamWriter(OutputStream out,String enc) throws UnsupportedEncodingException; //enc是編碼方式

  InputStreamReader和OutputStreamWriter的方法:

  ◇ 讀入和寫(xiě)出字符
  基本同Reader和Writer。

  ◇ 獲取當(dāng)前編碼方式
  public String getEncoding();

  ◇ 關(guān)閉流
  public void close() throws IOException;

  4.7.3 BufferedReader和BufferedWriter

  ◇ 生成流對(duì)象

  public BufferedReader(Reader in); //使用缺省的緩沖區(qū)大小
  public BufferedReader(Reader in, int sz); //sz為緩沖區(qū)的大小
  public BufferedWriter(Writer out);
  public BufferedWriter(Writer out, int sz);