posts - 84,  comments - 54,  trackbacks - 0

          一直覺得輸入輸出流是個令人頭痛的問題,今天下午,看完了《21》天上的一個例子,總結了一下。

          首先總結一下IO類

          ? // 一下兩組類都是基于字節流的,例如一些圖形數據文件的處理
          ?FileOutputStream
          ?BufferedOutputStream

          ?FileInputStream
          ?BufferedInputStream

          // 而以下兩組是基于字符流的處理效率會更高一些
          ?FileReader
          ?BufferedReader
          ?InputStreamReader
          ?
          ?FileWriter
          ?BufferedWriter
          ?OutputStreamWriter


          ?1 ????下面這個例子是拷貝一個文件到另外一個文件,文件的形式有兩種一種是基于字符型的如:txt文檔,或java文檔。
          ?2 ????而另一種是基于非字符的,而是用字節處理起來更方便。
          ?3
          ?4 /*
          ?5 *以下這段代碼是拷貝一個txt文檔到另一個位置
          ?6 */

          ?7
          ?8 ?? boolean ?eof? = ? false ;
          ?9 ?? int ?intChar? = ? 0 ;
          10
          11 ?? // 獲得對源文件到的連接
          12 ??File?source? = ? new ?FileSource(String?sourceName);
          13
          14 ?? // 讓輸入流與文件關聯起來,同時使用緩沖提高效率
          15 ??FileReader?fr? = ? new ?FileReader(source);
          16 ??BufferedReader?br? = ? new ?BufferedReader(fr);
          17
          18 ??File?destination? = ? new ?File(String?destinationName);
          19 ??FileWriter?fw? = ? new ?FileWriter(destination);
          20 ??BufferedWriter?bw? = ? new ?BufferedWriter(fw);
          21
          22 ?? while ( ! eof) {
          23 ?????intChar? = ?br.read();
          24 ????? if (intChar? != ? - 1 ) {
          25 ????????bw.writer(( char )intChar);
          26 ?????}
          else {
          27 ????????eof? = ? true ;
          28 ?????}

          29 ??}

          30
          31 ??bw.flush();
          32 ??br.close();
          33 ??bw.close();
          34
          35 // 以上的方式指示對基于字符的文件有作用,如果換成DOC文件拷貝以后就全是亂碼
          36 // 所以下面會介紹如何通過給予字節流的方法完整的復制源文件
          37


          /*
          *以下是基于字節流的文件拷貝,可以兼容字符文件的拷貝,例如拷貝
          */


          ????
          boolean ?eof? = ? false ;?? // 文件是否讀取完畢
          ????? int ?intChar? = ? 0 ;???? // 文件是否已經讀到尾

          ????
          // 文件輸入流????????
          ?????File?source? = ? new ?File(String?sourceName);
          ????FileInputStream?fis?
          = ? new ?FileInputStream(source);
          ????BufferedInputStream?bis
          = ? new ?BufferedInputStream(fis);

          ????
          // 文件輸出流
          ????File?destination? = ? new ?File(String?destinationName);
          ????FileOutputStream?fos?
          = ? new ?FileOutputStream(destination);
          ????BufferedOutputStream?bos?
          = ? new ?BufferedOutputStream(fos);

          ????
          do {
          ????????intChar?
          = ?bis.read();
          ????????
          if (intChar? != ? - 1 ) {
          ????????????bos.writer(intChar);
          ????????}
          else {
          ??????????eof?
          = ? true ;
          ????????}

          ????}
          while ( ! eof);
          ?????????
          ??????? bis.flush();
          ??????? bos.close();
          ??????? bis.close();

          posted on 2006-09-02 03:40 JavaCoffe 閱讀(2101) 評論(2)  編輯  收藏 所屬分類: J2SE基礎學習


          FeedBack:
          # re: 文件拷程序--小結文件輸入輸出流
          2006-09-02 12:02 | 壞孩子
          不錯不錯.我也在看io,拷貝文件用nio效率高些  回復  更多評論
            
          # re: 文件拷程序--小結文件輸入輸出流
          2006-09-12 11:48 | FisherWang
          第二種方法簡單易懂,挺不錯的,只是不能用它去拷貝.gif,還有拷貝rar文件不能打開,文件出錯,還有就是更改源文件后重新拷貝好像不起作用  回復  更多評論
            
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(5)

          隨筆分類(80)

          收藏夾(1)

          最新隨筆

          積分與排名

          • 積分 - 58590
          • 排名 - 894

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 孝昌县| 兴业县| 磐石市| 南丹县| 密山市| 绿春县| 洛阳市| 海丰县| 历史| 新巴尔虎左旗| 壶关县| 新余市| 道孚县| 会东县| 波密县| 九龙城区| 阳泉市| 奈曼旗| 洛浦县| 繁峙县| 渭源县| 元氏县| 昭苏县| 泾阳县| 都昌县| 三都| 饶平县| 新巴尔虎左旗| 民和| 南靖县| 灵武市| 民县| 武胜县| 丹东市| 星子县| 延津县| 河北省| 双鸭山市| 上饶市| 泸州市| 瑞丽市|