BloveSaga

          在希臘帕爾納斯山南坡上,有一個(gè)馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個(gè)大字: 認(rèn)識(shí)你自己!

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            34 隨筆 :: 12 文章 :: 122 評(píng)論 :: 0 Trackbacks

          ?????????????? File類(lèi)

          ?一個(gè)File類(lèi)的對(duì)象,表示了磁盤(pán)上的文件或目錄。
          ?File類(lèi)提供了與平臺(tái)無(wú)關(guān)的方法來(lái)對(duì)磁盤(pán)上的文件或目錄進(jìn)行操作。

          import java.io.*;
          class FileTest
          {
          ?public static void main(String[] args) throws Exception
          ?{
          ??//File f = new File("1.txt");
          ??//f.createNewFile();?? 創(chuàng)建文件
          ??//f.mkdir(); 創(chuàng)建文件夾
          ??//File f = new File("F:\\Java Develop\\1.txt");//使用絕對(duì)路徑
          ??//f.createNewFile();
          ??/*
          ??*WINDOWS平臺(tái)下有盤(pán)符,LINUX下是沒(méi)有的
          ??*考慮到JAVA語(yǔ)言的平臺(tái)性,所有用分隔符seperator/seperatorChar
          ??*/
          ??/*
          ??File fDir = new File(File.separator);//創(chuàng)建了當(dāng)前的根目錄
          ??String strFile = "Java Develop"+File.separator+"1.txt";
          ??File f = new File(fDir,strFile);
          ??f.createNewFile();
          ??//f.delete();
          ??f.deleteOnExit();
          ??Thread.sleep(3000);
          ??*/
          ??/*
          ??for(int i=0;i<5;i++)
          ??{
          ???File.createTempFile("linshi",".tmp");
          ???f.deleteOnExit();
          ??}
          ??Thread.sleep(3000);
          ??*/
          ??
          ??File fDir = new File(File.separator);
          ??String strFile ="Java Develop"+File.separator;
          ??File f = new File(fDir,strFile);
          ??//文件過(guò)濾器
          ??String[] names = f.list(new FilenameFilter()
          ??{
          ???public boolean accept(File dir,String name)
          ???{
          ????return name.indexOf(".java")!=-1;
          ???}
          ??});
          ??for(int i=0;i<names.length;i++)
          ??{
          ???System.out.println(names[i]);
          ??}
          ?}
          }

          ??????????? 流式I/0

          ?流(Stream)是字節(jié)的源或目的。
          ?兩種基本的流是: 輸入流(Input Stream)和輸出流(Output Stream)。從從中讀出一系列字節(jié)的
          ?對(duì)象稱(chēng)為輸入流。而能向其中寫(xiě)入一系列字節(jié)的對(duì)象稱(chēng)為輸出流。


          ?????????? 流的分類(lèi)
          ?
          ?節(jié)點(diǎn)流: 從特定的地方讀寫(xiě)的流類(lèi),例如:磁盤(pán)或一塊內(nèi)存區(qū)域。
          ?過(guò)濾流: 使用節(jié)點(diǎn)作為輸入或輸出。過(guò)濾流使用的是一個(gè)已經(jīng)存在的輸入流或輸出流連接創(chuàng)建的。
          ?(如下圖)


          ???????? InputStream(一個(gè)抽象的基類(lèi))
          ?.三個(gè)基本的讀寫(xiě)方法
          ? abstract int read(): 讀取一個(gè)字節(jié)數(shù)據(jù),并返回到數(shù)據(jù),如果返回-1,表示讀到了輸入流的
          ?????????????????????? 末尾。
          ? int read(byte[] b):? 將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,同時(shí)返回實(shí)際讀取的字節(jié)數(shù)。如果返回-1,
          ?????????????????????? 表示讀到了輸入流的末尾。
          ? int read(byte[] b,int off,int len): 將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,同時(shí)返回是實(shí)際讀取的字
          ?????????????????????? 節(jié)數(shù)。如果返回-1,表示讀到了輸入流的末尾。off指定在數(shù)組b中存放
          ?????????????????????? 數(shù)據(jù)的起始偏移位置;len指定讀取的最大字節(jié)數(shù)。
          ?其他的方法
          ? long-skip(long n): 在輸入流中跳過(guò)n個(gè)字節(jié),并返回實(shí)際跳過(guò)的字節(jié)數(shù)。
          ? int available():?? 返回在不發(fā)生阻塞的情況下,可讀取的字節(jié)數(shù)。
          ? void close():????? 關(guān)閉輸入流,釋放和這個(gè)流相關(guān)的系統(tǒng)資源。
          ? void mark(int reqdlimit): 在輸入流的當(dāng)前位置放置一個(gè)標(biāo)記,如果讀取的字節(jié)數(shù)多余
          ???????????????????? readlimit設(shè)置的值,則流忽略這個(gè)標(biāo)記。
          ? void reset():????? 返回到上一個(gè)標(biāo)記。
          ? boolean markSupported(): 測(cè)試當(dāng)前是否支持mark和reset方法。如果支持返回true,反之false。

          ???????? java.io包中的InputStream的類(lèi)層次?(下圖)

          ??????? OutputStream

          ?三個(gè)基本的寫(xiě)方法
          ?abstract void write(int b): 往輸出流中寫(xiě)入一個(gè)字節(jié)
          ?void write(byte[] b):?????? 往輸出流中寫(xiě)入數(shù)組b中的所有字節(jié)
          ?void writte(byte[] b,int off,int len): 往輸出流中寫(xiě)入數(shù)組b中從偏移量off開(kāi)始的len個(gè)
          ???????????????????????????? 字節(jié)的數(shù)據(jù)
          ?其它方法
          ?void flush(): 刷新輸出流,強(qiáng)制緩沖區(qū)中的輸出字節(jié)被寫(xiě)出
          ?void close(): 關(guān)閉輸出流,釋放和這個(gè)流相關(guān)的系統(tǒng)資源

          ??????? java.io包中OutputStream的類(lèi)層次(如下圖)



          ??????? 基本的流類(lèi)

          ?FileInputStream和FileOutputStream
          ?節(jié)點(diǎn)流,用于從文件中讀取或往文件中寫(xiě)入字節(jié)流。如果在構(gòu)造FileOutputStream時(shí),文件已經(jīng)
          ?存在,則覆蓋這個(gè)文件。
          ?
          ?BufferedInputStream和BufferedOutputStream
          ?過(guò)濾流,需要使用已經(jīng)存在的節(jié)點(diǎn)流來(lái)構(gòu)造,提供帶緩沖的讀寫(xiě),提高了讀寫(xiě)的效率。

          ?DataInputStream和DataOutputStream
          ?過(guò)濾流,需要使用已經(jīng)存在的節(jié)點(diǎn)流來(lái)構(gòu)造,提供了讀寫(xiě)Java中的基本數(shù)據(jù)類(lèi)型的功能。

          ?PipedInputStream和PipedOutputStream
          ?管道流,用于線程間的通信。一個(gè)線程的PipedInputStream對(duì)象從另一個(gè)線程的PipedOutputStream
          ?對(duì)象讀取輸入。要使管道流有用,必須同時(shí)構(gòu)造管道輸入流和管道輸出流。

          code:
          import java.io.*;
          class StreamTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ??/*
          ??int data;
          ??while((data=System.in.read())!=-1)? //從標(biāo)準(zhǔn)設(shè)備讀取數(shù)據(jù)
          ??{
          ???System.out.write(data);//從標(biāo)準(zhǔn)設(shè)備輸出數(shù)據(jù)
          ??}
          ??*/
          ??//輸出流寫(xiě)數(shù)據(jù),只需要關(guān)閉尾端的流就可以了,因?yàn)閒os連接到了bos
          ??FileOutputStream fos = new FileOutputStream("1.txt");
          ??//fos.write("());
          ??//fos.close();
          ??BufferedOutputStream bos = new BufferedOutputStream(fos);
          ??//bos.write("http//www.baidu.com".getBytes());
          ??//bos.flush();
          ??//bos.close();
          ??DataOutputStream dos=new DataOutputStream(bos); //連接到了bos和fis
          ??byte b=3;
          ??int i=78;
          ??char ch='a';
          ??float f=4.5f;
          ??dos.writeByte(b);
          ??dos.writeInt(i);
          ??dos.writeChar(ch);
          ??dos.writeFloat(f);
          ??dos.close(); //必須調(diào)用flush()或者close()不然不會(huì)寫(xiě)入硬盤(pán)
          ??
          ??//輸入流讀數(shù)據(jù)
          ??FileInputStream fis=new FileInputStream("1.txt");
          ??BufferedInputStream bis = new BufferedInputStream(fis);
          ??//byte[] buf=new byte[100];
          ??//int len=fis.read(buf);
          ??//int len=bis.read(buf);
          ??//System.out.println(new String(buf,0,len));
          ??//fis.close();
          ??//bis.close();
          ??//注意讀取的順序要和寫(xiě)的順序一樣
          ??DataInputStream dis = new DataInputStream(bis);
          ??System.out.println(dis.readByte());
          ??System.out.println(dis.readInt());
          ??System.out.println(dis.readChar());
          ??System.out.println(dis.readFloat());
          ??dis.close();??
          ??
          ?}
          }


          管道輸入/輸出流 code:
          import java.io.*;
          class PipedStreamTest
          {
          ?public static void main(String[] args)
          ?{
          ??PipedOutputStream pos=new PipedOutputStream();
          ??PipedInputStream pis=new PipedInputStream();
          ??//連接
          ??try
          ??{
          ???pos.connect(pis);
          ???new Producer(pos).start();
          ???new Consumer(pis).start();
          ??}
          ??catch(Exception e)
          ??{
          ???e.printStackTrace();
          ??}
          ?}
          }

          class Producer extends Thread
          {
          ?private PipedOutputStream pos;
          ?public Producer(PipedOutputStream pos)
          ?{
          ??this.pos=pos;
          ?}
          ?public void run()
          ?{
          ??try
          ??{
          ???pos.write("hello,welcome!".getBytes());
          ???pos.close();
          ??}
          ??catch(Exception e)
          ??{
          ???e.printStackTrace();
          ??}
          ?}
          }

          class Consumer extends Thread
          {
          ?private PipedInputStream pis;
          ?Consumer(PipedInputStream pis)
          ?{
          ??this.pis=pis;
          ?}
          ?public void run()
          ?{
          ??try
          ??{
          ???byte[] buf=new byte[100];
          ???int len=pis.read(buf);
          ???System.out.println(new String(buf,0,len));
          ???pis.close();
          ??}
          ??catch(Exception e)
          ??{
          ???e.printStackTrace();
          ??}
          ?}
          }

          =================================================================================
          ????????????? Java I/O庫(kù)的設(shè)計(jì)原則

          ?Java的I/O庫(kù)提供了一個(gè)稱(chēng)做鏈接的機(jī)制,可以將一個(gè)流與另一個(gè)流首尾相接,形成一個(gè)流管道的鏈接。
          ?這種機(jī)制實(shí)際上是一種被稱(chēng)做為Decorator(裝飾)的設(shè)計(jì)模式的應(yīng)用。
          ?
          ?通過(guò)流的鏈接,可以動(dòng)態(tài)的增加流的功能,而這些功能的增加是通過(guò)組合一些流的基本功能而動(dòng)
          ?態(tài)獲取的。

          ?我們要獲取一個(gè)I/O對(duì)象,往往需要產(chǎn)生多個(gè)I/O對(duì)象,這也是Java I/O庫(kù)不大容易掌握的原因,
          ?但在I/O庫(kù)中的Decorator模式的運(yùn)用,給我們提供了實(shí)現(xiàn)上的靈活性。

          ?I/O流的鏈接圖(如下)



          ?????????????? Reader和Writer

          ?Java程序語(yǔ)言使用Unicode來(lái)表示字符串和字符。
          ?Reader和Writer這兩個(gè)抽象類(lèi)主要用來(lái)讀寫(xiě)字符流。

          ?java.io包中Reader的類(lèi)層次(如下圖)

          ?java.io包中Writer的類(lèi)層次(如下圖)


          ?code:
          import java.io.*;
          class StreamTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ??/*
          ??FileOutputStream fos = new FileOutputStream("1.txt");
          ??OutputStreamWriter osw = new OutputStreamWriter(fos);?
          ??BufferedWriter bw = new BufferedWriter(osw);
          ??
          ??bw.write("
          ??bw.close();?
          ??
          ??FileInputStream fis = new FileInputStream("1.txt");
          ??InputStreamReader isr = new InputStreamReader(fis);
          ??BufferedReader br = new BufferedReader(isr);
          ??System.out.println(br.readLine());
          ??br.close();
          ??*/
          ??//InputStreamReader/OutputStreamWriter是一個(gè)中間過(guò)度類(lèi),連接字符和字符串
          ??InputStreamReader isr = new InputStreamReader(System.in);
          ??BufferedReader br = new BufferedReader(isr);
          ??String strLine;
          ??while((strLine=br.readLine())!=null)
          ??{
          ???System.out.println(strLine);
          ??}
          ??br.close();
          ?}
          }

          ??????????? 字符集的編碼

          ?ASCII(American Standard Code for Information Interchange,美國(guó)信息互換標(biāo)準(zhǔn)代碼),是基
          ?于常用的英文字符的一套電腦編碼系統(tǒng)。我們知道英文中經(jīng)常使用的字符,數(shù)字符號(hào)被計(jì)算機(jī)
          ?處理時(shí)都是以二進(jìn)制編碼的形式出現(xiàn)(bit)二進(jìn)制數(shù)對(duì)應(yīng)。其最高位是0,相應(yīng)的十進(jìn)制數(shù)是0-127
          ?如,數(shù)字1,有一些制表符和其他符號(hào)組成。ASCII是現(xiàn)金最通用的單字節(jié)編碼系統(tǒng)。

          ?GB2312: GB2312碼是中華人民共和國(guó)國(guó)家漢字信息交換用編碼,全稱(chēng)《信息交換用漢字編碼字
          ?符集-基本集》。主要用于給每一個(gè)中文字符指定相應(yīng)的數(shù)字,也就是進(jìn)行編碼。一個(gè)中文字符
          ?用兩個(gè)字節(jié)的數(shù)字來(lái)表示,為了和ASCII碼有所區(qū)別,將中文字符每一個(gè)字節(jié)的最高位置都用1
          ?來(lái)表示。

          ?GBK:為了對(duì)更多的字符進(jìn)行編碼,國(guó)家又發(fā)布了新的編碼系統(tǒng)GBK(GBK的K是“擴(kuò)展”的漢語(yǔ)
          ?拼音的第一個(gè)字母)。在新的編碼系統(tǒng)里,除了完全兼容GB2312外,還對(duì)繁體中文,一些不常用
          ?的漢字和許多符號(hào)進(jìn)行了編碼。

          ?ISO-8859-1:是西方國(guó)家所使用的字符編碼集,是一種單字節(jié)的字符集,而英文實(shí)際上只用了其
          ?中數(shù)字小于128的部分。

          ?Unicode: 這是一種通用的字符集,對(duì)所有語(yǔ)言的文字進(jìn)行統(tǒng)一編碼,對(duì)每一個(gè)字符都采用2個(gè)字節(jié)
          ?來(lái)表示,對(duì)于英文字符采取前面加“0”字節(jié)的策略實(shí)現(xiàn)等長(zhǎng)兼容。如"a"的ASCII碼為0x61,
          ?UNICODE就為0x00,0x61。

          ?UTF-8: Elight-bit UCS Transformation Format,(UCS,Universal Character Set,通用字符集,
          ?UCS是所有其他字符集標(biāo)準(zhǔn)的一個(gè)超集)。一個(gè)7位的ASCII碼值,對(duì)應(yīng)的UTF碼是一個(gè)字節(jié),如果
          ?字符是0x0000,或在0x0080與0x007f之間,對(duì)應(yīng)的UTF碼是兩個(gè)字節(jié),如果字符在0x0800與0xffff
          ?之間,對(duì)應(yīng)的UTF碼是三個(gè)字節(jié)。


          評(píng)論

          # re: 基礎(chǔ)學(xué)習(xí)之---Java I/O學(xué)習(xí)(一) 2007-07-23 16:10 99
          Java I/O學(xué)習(xí)
          http://iask.sina.com.cn/info/ztc-1047.shtml  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 曲靖市| 林芝县| 怀宁县| 开平市| 东明县| 涞水县| 金华市| 安仁县| 高陵县| 武清区| 鄂托克旗| 桂东县| 雷州市| 冷水江市| 镇巴县| 景泰县| 二手房| 台南市| 基隆市| 靖边县| 武平县| 舒城县| 朝阳市| 阿巴嘎旗| 奎屯市| 肇庆市| 河曲县| 思茅市| 芜湖县| 珲春市| 砚山县| 肃南| 亳州市| 修武县| 宝山区| 顺昌县| 安宁市| 贵州省| 新龙县| 板桥市| 白银市|