隨筆 - 19  文章 - 0  trackbacks - 0
          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          所有的流在使用完畢時,都需要調用close方法進行關流,釋放資源。
          由于流操作都會有異常,如果發(fā)生異常就有可能導致close方法不能被調用
          所以,IO異常一定要處理,close方法寫在finally語句中
          1.InputStream : 輸入字節(jié)流 方法: read()從流(關聯(lián)的設備)中讀一個字節(jié)
          ** int read(buf):從流中讀取n個字節(jié)放入緩沖區(qū),方法會返回一個讀取字節(jié)的個數(shù) ips-->buf
          讀到一個-1,說明讀到了流的末尾
           ------------------------------------------------------------------------------------------
          |---FileInputStream: 重載的構造函數(shù)  (String fileName)  (File file)

          2.OutputStream: 輸出字節(jié)流 :方法 write(int c)將一個字節(jié)寫入流  (byte)c
          write(buf,offset,len)將指定字節(jié)數(shù)組的一部分寫入流。 buf-->ops
           -------------------------------------------------------------------------------------------
          |---FileOutputStream: 重載的構造函數(shù) (Strng fileName) (String fileName, boolean append)
           append:指定數(shù)據(jù)是否追加到文件的末尾,默認是false,覆蓋原有的數(shù)據(jù),
           設置為true,將數(shù)據(jù)追加到文件的末尾
          3.Reader:輸入字符流 int read() 讀一個字符   int read(buf)  buf是char[]類型
          |---FileReader:  FileReader = InputStreamReader(FileInputStream) 只做了一件事:解碼(父類在做)
          4.Writer:輸出字符流 write(int c) (char)c \  write(String str)
          |---|---FileWriter:  FileWriter = OutputStreamWriter(FileOutputStream) 只做了一件事:編碼

          理解(會用):
          1.裝飾設計模式: 對原有的類的進行包裝,對方法進行增強
          BufferedReader:實現(xiàn)緩沖的功能   創(chuàng)建包裝流對象的時候,必須組合一個被包裝的底層流
              增加了一個新方法 String readLine() 讀一行
          |--LineNumberReader: 增加了行號功能,getLineNumber() 、setLineNumber()
          BufferedWriter:實現(xiàn)了緩沖功能  new BufferedWriter(new FileWriter("1.txt");
              增加了新方法  newLine() 另起一行
          BufferedInputStream:實現(xiàn)緩沖的功能
          BufferedOutputStream:實現(xiàn)緩沖的功能

          2.InputStreamReader: 轉換流   : 包裝,實現(xiàn)了編碼解碼的功能
          new InputStreamReader(new FileInputStream("1.txt"));

          3.使用包裝流包裝System.in,讀鍵盤方便,可以讀一行
          BufferedReader br =
           new BufferedReader(new InputStreamReader(System.in));
          String line = br.readLine();
           
           
          IO需要會寫的程序: BufferedReader和BufferedWriter包裝InputStream和OutputStream,讀一行寫一行

            BufferedReader和BufferedWriter包裝Reader和Writer
            BufferedInputStream和BufferedOutputStream包裝InputStream和OutputStream
            用基礎流讀寫,自定義數(shù)組作為緩沖區(qū),實現(xiàn)拷貝
            
          -------以下做一個總結:

          io流:數(shù)據(jù)傳輸?shù)闹修D站-->IO流-->目的地

           IO流一般都是成對出現(xiàn)的,也就是說按照流的分向:輸入流-->輸出流
           IO流按照操作來分: 字節(jié)流-->字符流
           
          一.字符流
          基類:Reader(讀)Writer(寫)
          |-Reader
           |--BufferedReader:對Reader進行了包裝,提供了緩沖區(qū)(8192),有ReadLine()方法
            構造函數(shù):BufferedReader(Reader r);
           |--InputStreamReader:轉換流:將字節(jié)流轉換成字符流:new InputStreamReader(System.in);
            |--FileReader:讀取文件的字符流,FileReader(File file) FileReader(String fileName);
          |-Writer
           |--BufferedWriter:包裝流:常用的方法write(String s)、flush()刷新  newLine()換行
            構造函數(shù):BufferedWriter(Writer w);
           |--OutputStreamWriter:轉換流: new OutputStreamWriter(System.out);
            |--FileWriter:寫入文件,FileWriter(File file)  FileWriter(String fileName)
             FileWriter(File file,boolean append),FileWriter(String fileName,boolean append)
             當append為true,將寫入到文件的末尾處,當為false時,從文件開頭開始寫.就會覆蓋原來的.默認為false
             
          二.字節(jié)流:
          |-InputStream(輸入流)
           |--FileInputStream:讀取文件的字符流,和FileReader基本是一樣
           |--FilterInputStream:過濾流,一般不使用,只是針對了InputStream進行了包裝
            |--BufferedInputStream:包裝類:BufferedReader(InputStream in),提供緩存功能
            
          |-OutputStream(輸出流)
           |--FileOutputStream:寫入文件的字符流,和FileWriter基本一樣
           |--FilterOutputStream
            |--BufferedOutputStream:包裝類:BufferedWriter(OutputStream out);
            
          三.使用IO流必須要捕獲異常,原因在于我們必須要還資源(關閉流)

           1 FileWriter fw = null;
           2 try
           3 {
           4     fw = new FileWriter("src/1.txt");
           5 }
           6 catch(IOException e)
           7 {
           8     e.printStractTrace();
           9 }
          10 finally
          11 {
          12     try{if(fw!=null)fw.close();}catch(IOException){e.printStackTrace();}
          13 }

          四.File文件類
          1.構造方法:
          File(File parnt,String child)
          根據(jù)prent抽象路徑名和child路徑名字符串創(chuàng)建一個新的file實例.
          File(String pathname)
          通過將給定的路徑名字來創(chuàng)建一個新的file實例.
          File(String parent, String child)
          根據(jù) parent 路徑名字符串和 child 路徑名字符串創(chuàng)建一個新 File 實例.

          2.常用方法:
          isFile:判斷對象是否是一個標準文件
          isDirectory:判斷對象是否為一個文件夾
          isAbsolute:判斷是否為一個絕對路徑
          exists:判斷對象指定的文件是否存在
          createNewFile:根據(jù)對象的描述創(chuàng)建一個對象
          getName:獲得文件名
          getPath:獲得路徑名
          getParent:獲得文件的父級抽象路徑
          getAbsolutepath:獲得文件的絕對路徑名
          mkdir:創(chuàng)建此抽象路徑指定的目錄,(只能在存在的文件夾下創(chuàng)建一個目錄)
          mkdirs:創(chuàng)建此抽象路徑指定的目錄,包括所有必須但不存在的目錄.創(chuàng)建多級目錄(c:/a/b/c)
          list(FilenameFilter filter):根據(jù)指定過濾器遍歷文件夾中的所有文件,返回String[]
           如果對象為標準文件,則返回null,如果對象是一個空文件夾,則返回空數(shù)組。length為0
           FilenameFilter是一個接口,只有一個方法accept,我們需要實現(xiàn)接口的accept方法。
           實現(xiàn)類是給list方法自動調用的
           方法的參數(shù)是list方法傳給我們的,返回的結果也是給list方法去用。
          listFiles:和list基本一樣,返回值類型不一樣,返回File[]。
          常用案例:遍歷目錄下所有的文件和文件夾   拷貝一個文件夾  .

          五:RandomAccessFile 文件流,可以讀寫
          1.RandomAccessFile(File file,String mode)、RandomAccessFile(String fileName,String mode)
           mode:常用的: r,只讀 rw讀寫
          2.有很多read和write方法.
           seek方法,指定從那個位置開始讀seek(0) ,從原有的位置覆蓋掉
          skipBytes(int n):跳過多少個字節(jié)

          六:PrintStream、PrintWriter打印流
          有一個特殊的方法print可以實現(xiàn)打印
          write方法是直接將字節(jié)和字符寫出去
          print:首先調用對象的toString方法轉成字符串(如果是基本數(shù)據(jù)類型,會先自動裝箱)
           再將字符串編碼成字節(jié)數(shù)組,調用write方法寫出去

          七:SequenceInputStream序列流
          可以將多個字節(jié)流組合起來
          構造方法:SequenceInputStream(Enumeration<? extends InputStream> e) 
            //Enumeration可以通過Vector來獲得,如果用的是ArrayList,如何獲得呢?
               SequenceInputStream(InputStream in1,InputStream in2)

          八:ObjectInputStream、ObjectOutputStream操作對象的字節(jié)流
          一般成對出現(xiàn)
          使用writeObject方法寫入的對象,只能由readObject方法讀出來
          操作的對象必須實現(xiàn)java.io.Serializable序列化接口,該對象才可以被序列化和反序列化。
          序列化: Java中規(guī)定的一種保存對象的數(shù)據(jù)格式

          九:DataInputStream、DataOutputStream操作基本數(shù)據(jù)類型,格式化數(shù)據(jù)
          readInt、writeInt等方法。
          writeInt寫入一個整數(shù),文件大小為4字節(jié)。證明就是把基本數(shù)據(jù)類型對應的字節(jié)寫出去了,沒有丟失精度

          十:ByteArrayInputStream、ByteArrayOutputStream對Byte數(shù)組進行讀寫的字節(jié)流,針對內存進行讀寫
          源和目的地都是內存,一般用于對內存中的數(shù)據(jù)進行處理。

          十一:PipedInputStream、PipedOutputStream管道流
          1、輸入管道流
          構造方法:PipedInputStream(PipedOutputStream pos)實現(xiàn)拼接
          也可以通過connect(PipedOutputStream pos)方法進行拼接

          2、輸出管道流
          構造方法:PipedOutputStream(PipedInputStream pis)實現(xiàn)拼接
          也可以通過connect(PipedInputStream pis)方法進行拼接

           1 --Test:序列化與反序列化..
           2 package com.java.kudy_Say;
           3 
           4 import java.io.FileNotFoundException;
           5 import java.io.FileOutputStream;
           6 import java.io.IOException;
           7 import java.io.ObjectOutputStream;
           8 import java.io.Serializable;
           9 import java.util.ArrayList;
          10 import java.io.ObjectInputStream;
          11 import java.io.FileInputStream;
          12 /*
          13     序列化與反序列化的過程
          14 */
          15 public class Test {
          16     
          17     public static void main(String[]args) throws FileNotFoundException, IOException,ClassNotFoundException
          18     {
          19             
          20 /*        Student s1 = new Student("張三",18);
          21         Student s2 = new Student("王五",19);
          22         Student s3 = new Student("李四",20);
          23         Student s4 = new Student("大毛",21);
          24         ObjectOutputStream oos = 
          25                 new ObjectOutputStream(new FileOutputStream("f:/a.txt"));
          26         ArrayList<Student> al = new ArrayList<Student>();
          27         al.add(s1);
          28         al.add(s2);
          29         al.add(s3);
          30         al.add(s4);
          31         oos.writeObject(al);
          32         oos.close();//關閉流
          33         //首先我們把內容放到一個集合里面去
          34 */
          35         ObjectInputStream ois = 
          36                 new ObjectInputStream(new FileInputStream("f:/a.txt"));
          37         ArrayList<Student> al = (ArrayList<Student>)ois.readObject();
          38         for(Student s :al)
          39             System.out.println(s);
          40         ois.close();
          41     
          42     
          43         
          44     }
          45 }
          46 
          47 //必須要實現(xiàn)一個類
          48 class Student implements Serializable
          49 {
          50     private String name;
          51     private int age;
          52     Student(){}
          53     Student(String name,int age)
          54     {
          55         this.name = name;
          56         this.age = age;
          57     }
          58     public String toString()
          59     {
          60         return name+"@"+age;
          61     }
          62 }

           

          posted on 2012-08-18 19:51 、小細 閱讀(269) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 昌吉市| 花莲县| 襄垣县| 绥江县| 郸城县| 永济市| 右玉县| 江津市| 张北县| 东山县| 东源县| 台中市| 交城县| 喀喇沁旗| 太谷县| 家居| 东丽区| 浦东新区| 象山县| 临颍县| 辉县市| 霍邱县| 黄山市| 视频| 岳西县| 兰州市| 扎赉特旗| 邛崃市| 都安| 乌审旗| 蒙阴县| 万山特区| 荥经县| 荆州市| 大厂| 岳普湖县| 巴南区| 金山区| 台州市| 秭归县| 江都市|