Microsoft PowerPoint - SE7ch12.ppt

Size: px
Start display at page:

Download "Microsoft PowerPoint - SE7ch12.ppt"

Transcription

1 第十二章檔案處理 課前指引除了使用鍵盤輸入資料之外, 另一個常見的資料來源就是 檔案 檔案也可以作為一個中介存放媒體, 例如 : 我們可以將欲排序的資料存放在資料檔內, 經由排序程式的處理, 形成有用的已排序資訊再回存到檔案中, 以便於下次搜尋資料時, 可以使用比較快速的搜尋演算法來搜尋資料 章節大綱 12.1 Java 的檔案處理 12.2 字元串流的檔案處理 12.3 位元串流的檔案處理 12.4 本章回顧

2 12.1 Java 的檔案處理 除了使用鍵盤輸入資料之外, 另一個常見的資料來源就是 檔案 舉例來說, 以往當我們在程式執行中輸入資料, 資料將存放在某個變數或陣列中, 一旦結束程式再重新啟動程式後, 上一次輸入的資料將會消失, 這是因為程式的資料是儲存在主記憶體中, 當程式結束時, 程式佔用的主記憶體空間將被釋放, 因此資料無法被儲存到下一次重新執行程式時 不過, 如果我們先將資料存放到檔案中, 在下一次重新執行程式時, 就可以由檔案中載入上次存放的資料, 並且即使是重新開機, 資料也不會消失, 這是由於檔案是存放在磁碟中, 而非主記憶體 Java 的檔案處理 除此之外, 檔案也可以作為一個中介存放媒體, 例如 : 我們可以將欲排序的資料存放在資料檔內, 經由排序程式的處理, 形成有用的已排序資訊再回存到檔案中, 以便於下次搜尋資料時, 可以使用比較快速的搜尋演算法來搜尋資料 4

3 12.1 Java 的檔案處理 除了程式本身的資料運算之外,Java 將其餘由外部輸入或輸出到外部設備的資料交由 java.io 類別庫的類別來處理 例如檔案 印表機等都屬於 java.io 類別庫的服務範圍 Java 將檔案的處理, 視為一個串流 (stream), 不論在哪種硬體及作業系統環境下, 檔案都被看成是由眾多字元 (characters) 或位元 (bits) 所組成的串流, 因此程式設計師在進行檔案方面的處理時, 面對的其實是一個資料串流, 如圖 12-1 示意 Java 的檔案處理 圖 12-1 檔案是一種資料串流 串流分為輸入串流 (input stream) 與輸出串流 (output stream), 分別用來對應資料的讀取與寫入 Java 將處理串流的工作交由 java.io 類別庫完成, 該類別庫可以讓 Java 進行所有 IO 的處理, 而檔案也屬於其中一種, 我們可以在需要進行檔案讀寫時, 匯入該類別庫內的特定類別或者將整個 java.io 類別庫匯入 6

4 12.1 Java 的檔案處理 檔案類型與類別對於 Java 而言, 檔案分為兩種 : 文字檔 (Text file) 與二進位檔 (Binary file), 其特色如下 純文字檔 : 方便閱讀, 但較無保密性 其他使用者也可以透過純文字編輯器開啟並成功閱讀 在 Java 程式中, 純文字檔可使用 Reader 與 Writer 類別來進行讀寫工作 二進位檔 : I/O 處理速度較快並具有保密性, 但檔案內容需透過程式轉譯才能閱讀 二進位檔的資料是由一連串的位元或位元組所組合, 通常使用在某些特殊用途, 例如圖檔 在 Java 程式中, 二進位檔可透過 InputStream 與 OutputStream 類別來進行讀寫工作 Java 的檔案處理 Coding 注意事項 純文字檔也可以透過 InputStream 與 OutputStream 類別進行讀寫工作 這是因為, 所有檔案的內容實際上都是以 01 等二進制檔案格式存放於磁碟中, 只不過純文字檔的位元編碼具有特殊結構, 當使用 InputStream 與 OutputStream 類別進行純文字檔的讀寫工作時, 將忽略其編碼格式, 例如複製檔案時, 就可以適用 但若要將純文字檔以文字模式在 Java 程式中輸出, 則仍以 Reader 與 Writer 類別較為適當 8

5 12.1 Java 的檔案處理 事實上,Java 程式在進行檔案的讀寫工作時, 一般並未使用上述的四種類別直接進行工作, 而是使用其子孫類別進行工作, 因為這些子孫類別已經繼承了上述四種類別的重要方法 例如, 我們會使用 FileReader 類別讀取純文字檔, 而當工作完畢欲將檔案關閉時所使用的 close() 方法, 就是繼承自 Reader 類別 ( 並在子孫類別中被改寫 ) 本章所介紹的相關類別繼承圖, 如圖 中底色類別所示 Java 的檔案處理 圖 12-2 與 IO 有關的部分類別繼承圖 ( 底色為本章與純文字檔案有關之類別 ) 10

6 12.1 Java 的檔案處理 圖 12-3 與 IO 有關的部分類別繼承圖 ( 底色為本章與二進位檔案有關之類別 ) 字元串流的檔案處理 字元串流亦即串流內以字元為單位, 此處的字元指的是 Unicode, 因此, 只有純文字檔適合使用字元串流進行讀寫 Reader 與 Writer 類別是以字元串流方式來處理純文字檔, 這兩個類別提供了關於讀寫純文字檔的基本成員方法, 如表 但我們無法直接使用這兩個類別的物件 ( 原因後述 ), 而是使用其衍生類別的物件進行實際的讀寫工作 當然, 由於這些類別繼承自 Reader/Writer 類別, 因此也可以使用表 的各種成員方法 12

7 12.2 字元串流的檔案處理 方法宣告 用途 回傳值說明 abstract void close() 關閉字元串流 無 int read() 讀取字元串流中的單一個字元 -1 代表串流已讀取完畢 其餘正 整數或 0 則代表讀取字元成功 int read(char[] cbuf) abstract int read(char[] cbuf, int off, int len) 讀取字元串流中的資料, 並將之放入 cbuf 字元陣列中 讀取字元串流中的資料, 將之放入 cbuf 字元陣列, 並由 cbuf[off] 開始存放, 且指定最多讀取 len 個字元 回傳值為讀取字元的數量,-1 代表串流已讀取完畢 回傳值為讀取字元的數量,-1 代表串流已讀取完畢 long skip(long n) 略過 n 個字元不讀取 實際被略過的字元數量 表 12-1 Reader 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 字元串流的檔案處理 方法宣告 用途 回傳值說明 Writer append(char c) 在串流內增加一個字元在末端 回傳已經增加字元在末端的串流 abstract void close() 關閉字元串流 無 abstract void flush() 將緩衝區的內容寫入到檔案 當使用 無 緩衝區時, 必須記得使用此方法, 否則資料僅會存放在串流中而不會寫入到檔案內 void write(char[] cbuf) 將 cbuf 字元陣列的內容寫入串流 無 abstract 將字元陣列由 cbuf[off] 開始寫入 len 個 無 void write(char[] cbuf, int off, int len) 字元到串流 void write(int c) 寫入單一個字元到串流 無 void write(string str) 寫入一個字串到串流 無 void write(string str, int off, int len) 寫入一個字串的第 off~off+len-1 個字元到串流 無 表 12-2 Writer 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 14

8 12.2 字元串流的檔案處理 由上面的兩個表格中, 我們可以發現 Reader/Writer 類別的有些成員方法被宣告為 abstract, 代表該類別無法直接產生物件, 必須繼承後改寫 (override) 並實作這些 abstract method 才能產生物件 因此我們一般都是使用 Reader/Writer 類別的衍生類別來產生物件, 並且這些衍生類別已經實作了 abstract method, 並不需要我們自行實作 FileReader 類別 InputStreamReader 為 Reader 的子類別,FileReader 為 InputStreamReader 的子類別 ( 見圖 12-2) 我們將使用 FileReader 作為讀取文字檔案的主要類別, 因此, 可使用的方法也包含祖先類別的方法 任何對於檔案內讀寫動作可以分為三個步驟 : 分別是開檔 讀寫 關檔 其中, 開檔動作包含在建立檔案物件時的建構子, 例如 FileReader 的建構子如下 : FileReader 的建構子 FileReader(File file) FileReader(FileDescriptor fd) FileReader(String filename) // 上述建構子會拋出 FileNotFoundException 例外, 它是 IOException 例外類別的子類別 16

9 FileReader 類別 語法說明 : 由於前兩個建構子的參數都是本書未介紹的類別型態, 因此不多作介紹本書僅介紹第三類建構子 FileReader(String filename), 其中,fileName 代表檔案路徑及檔名的字串, 我們可以使用絕對路徑或相對路徑來表示 Windows 與 Unix 的目錄分隔符號不同 Unix/Linux 為 / Windows 為 \, 而 \ 在 Java 字串中, 被視為控制字元, 故需要使用兩個 \, 也就是 \\ 來表示目錄分隔符號 實用範例 12-1 : 開啟純文字檔, 並使用字元串流方式讀取文字檔內容後輸出並統計所讀取的字元個數 範例 12-1:ch12_01.java( 隨書光碟 myjava\ch12\ch12_01.java) FileReader 類別 /* 檔名 :ch12_01.java 功能 : 以字元串流讀取文字檔 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_01 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException 使用字串指定檔名與路徑 char cbuf[] = new char[256]; FileReader fr = new FileReader("c:\\myJava\\ch12\\file\\text1.txt"); int num = fr.read(cbuf); // 讀取最多 256 個字元到 cbuf 陣列中 String str1 = new String(cbuf,0,num); // 字元陣列轉換為字串 System.out.println(" 總共讀取 " + num + " 個字元數 "); System.out.println(" 檔案內容如下 "); System.out.println(str1); fr.close(); // 關檔 18

10 FileReader 類別 text1.txt( 隨書光碟 myjava\ch12\file\text1.txt ) 這裡有兩個換行符號 \r\n 這裡有兩個換行符號 \r\n 執行結果 : 範例說明 : 總共讀取 67 個字元數檔案內容如下 S 王大民 S 郭小志 S 胡小龍 (1)FileReader 建構子會產生 FileNotFoundException 例外, read() 會產生 IOException 例外, 所以在第 9 行, 使用 throws 讓系統捕捉例外 FileReader 類別 (2) 第 12 行記錄了目標文字檔的路徑及檔名 文字檔的內容如上圖 (3) 第 14 行, 透過 read 讀取串流內的字元, 由於 cbuf 字元陣列的大小為 256, 因此一次會讀取 256 個字元, 如果不足, 則讀取至最後一個字元為止, 並且回傳值將會是實際讀取到的字元數量 (4) 由執行結果中, 可以發現一共讀取到 67 個字元, 這是因為文字檔中, 第一行與第二行分別有 (21+2) 個字元, 最後一行則有 21 個字元 對於 Java 而言, 不論中英文都算是一個字元 並且, 前兩行多的兩個字元分別是 \r 與 \n 控制字元, 在字元表中, 分別代表的是 Carriage Return( 返回該行第一格 ) 及 NewLine( 換行 ), 而 Windows 在文字檔的每個換行處都會加上這兩個符號, 當純文字編輯器讀取到這兩個符號時, 就會顯示出換行的效果 (5) 第 19 行是關檔 20

11 FileReader 類別 實用範例 12-2 : 使用迴圈讀取純文字檔的所有內容 範例 12-2:ch12_02.java( 隨書光碟 myjava\ch12\ch12_02.java) /* 檔名 :ch12_02.java 功能 : 使用迴圈讀取文字檔的全部內容 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_02 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException char cbuf[] = new char[16]; FileReader fr = new FileReader("c:\\myJava\\ch12\\file\\text1.txt"); int num; String str1; FileReader 類別 while((num = fr.read(cbuf))!=-1) 使用迴圈讀取文字檔的全部內容 str1 = new String(cbuf,0,num); // 字元陣列轉換為字串 System.out.println(" 總共讀取 " + num + " 字元數 "); System.out.println(str1); System.out.println(" "); fr.close(); // 關檔 22

12 FileReader 類別 執行結果範例說明 : (1) 這個範例和範例 12-1 使用相同的目標文字檔, 但這次我們將 cbuf 字元陣列的大小設定為 16, 明顯不足以一次讀取完畢字元串流的所有內容 因此在第 15~21 行, 使用迴圈來分次讀取字元串流的內容, 每次會自動讀取最多 16 個字元 (2) 在執行結果中, 可以發現每次讀取的字元數量, 最後一次為 3 個字元, 然後再嘗試讀取時, 將會獲得 -1 回傳值而離開迴圈 總共讀取 16 字元數 S 王大民 總共讀取 16 字元數 S 總共讀取 16 字元數郭小志 S 總共讀取 16 字元數 胡小龍 總共讀取 3 字元數 FileReader 類別 try-with-resources 在前面我們都使用了 throws 預防當讀取檔案時出現例外狀況, 而在第 10 章時我們知道, 如果不想使用 throws, 則應該在函式內使用 try-catch 來捕捉並處理例外 為了替這類因存取資源而撰寫的例外程式尋求一個更簡便的寫法,JDK7 提供了 try-with-resources 機制, 範例如下 : 觀念及實用範例 12-3 : 使 try-with-resources 機制重新撰寫範例 12-1, 使得在 main() 函式內直接處理例外 範例 12-3:ch12_03.java( 隨書光碟 myjava\ch12\ch12_03.java) 24

13 FileReader 類別 /* 檔名 :ch12_03.java 功能 :try-with-resources */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_03 // 主類別 public static void main(string args[]) char cbuf[] = new char[256]; try 後面可以接上 ( 資源 ) try(filereader fr = new FileReader("c:\\myJava\\ch12\\file\\text1.txt")) int num = fr.read(cbuf); String str1 = new String(cbuf,0,num); System.out.println(" 總共讀取 " + num + " 個字元數 "); System.out.println(" 檔案內容如下 "); System.out.println(str1); fr.close(); // 關檔 catch(filenotfoundexception e) System.out.println(" 例外發生 : 找不到該檔案 "); FileReader 類別 catch(final IOException e) System.out.println(" 例外發生 : 檔案存取錯誤 "); 執行結果 :( 同範例 12-1) 範例說明 : 以往在 for 迴圈的關鍵字 for 之後會有 (), 在其中宣告的變數屬於 for 迴圈專有 JDK7 提供的 try-with-resources 機制則是允許使用者在 try() 的括號內宣告變數並產生物件實體, 而這些變數將在 try 內生效, 如果在 () 內執行敘述時發生了例外, 則例外可以被 catch() 捕捉 因此, 我們通常會在需要使用外部資源時, 將之撰寫於 try() 的小括號內, 例如第 13 行開啟檔案如果不存在, 則會被第 22~25 行的 catch(filenotfoundexception e) 捕捉到 小試身手 12 1 請將範例 12 3 第 13 行的檔名由 text1.txt 改為不存在的 text2.txt, 然後進行編譯與執行, 看看會獲得什麼樣的執行結果? 26

14 FileWriter 類別 相對於 FileReader 的讀取功能,FileWriter 類別則提供寫入文字檔的功能 同樣地,OutputStreamWriter 為 Writer 的子類別, FileWriter 為 OutputStreamWriter 的子類別 ( 見圖 12-2), 因此,FileWriter 產生的物件也可以使用祖先類別的方法 寫入的開檔動作同樣包含在建構子,FileWriter 的建構子如下 : FileWriter 的建構子 FileWriter(File file) FileWriter(File file, boolean append) FileWriter(FileDescriptor fd) FileWriter(String filename) FileWriter(String filename, boolean append) // 上述建構子會拋出 IOException 例外 FileWriter 類別 語法說明 : 前三個建構子的參數都是本書未介紹的類別型態, 因此不多作介紹, 本書僅介紹後兩類建構子, 其中,fileName 代表檔案路徑及檔名的字串而 append 則是指定 是否覆蓋檔案原有內容, 若欲覆蓋原有檔案內容, 則將之設定為 false 或不設定 ; 若希望將新資料加在舊有資料後面, 則設定為 true 實用範例 12-4 : 將資料使用字元串流方式寫入純文字檔 範例 12-4:ch12_04.java( 隨書光碟 myjava\ch12\ch12_04.java) /* 檔名 :ch12_04.java 功能 : 以字元串流寫入文字檔 */ package myjava.ch12; import java.lang.*; import java.io.*; 28

15 public class ch12_04 // 主類別 public static void main(string args[]) throws IOException String str1 = " 費氏數列如下 :"; char endch[] = 'C','o','n','t','i','n','u','e','.','.','.'; int numf; FileWriter fw = new FileWriter("c:\\myJava\\ch12\\file\\text2.txt"); fw.write(str1); fw.write('\r'); fw.write('\n'); // 寫入換行字元 for(int i=1;i<10;i++) numf=fib(i); fw.write(numf+" "); fw.write(endch); fw.close(); // 關檔 public static int Fib(int n) if((n==1) (n==0)) return n; else return Fib(n-1)+Fib(n-2); int 與字串連結, 會自動轉型為字串 FileWriter 類別 執行結果程式執行完畢, 會在 c:\myjava\ch12\file\ 目錄下產生 text2.txt 檔, 內容如下 範例說明 : (1) 範例執行完畢, 會產生 text2.txt, 內容如上圖, 其中的換行效果, 是程式第 17 行的作用 (2) 第 16 行寫入字串 第 25 行寫入字元陣列 第 17 行則是寫入單一字元兩次 這三種是 writer 函式利用多載 (overload) 功能提供的三種參數列 30

16 FileWriter 類別 (3) 第 22 行, 由於數值與字串透過 + 法運算時, 執行的是字串連結, 因此結果為字串, 所以使用的是 write(string str) 函式 (4) 本範例如果檔案原本不存在, 則會建立新檔案 如果檔案原本已經存在, 則原始檔案內容會被新的內容覆蓋 小試身手 12 2 延續小試身手 12 1, 請先執行範例 12 4, 產生 text2.txt 檔, 然後再一次執行小試身手 12 1, 看看是否會獲得與小試身手 12 1 不一樣的執行結果? FileWriter 類別 實用範例 12-5 : 在原有文字檔案後面增加資料 範例 12-5:ch12_05.java( 隨書光碟 myjava\ch12\ch12_05.java) /* 檔名 :ch12_05.java 功能 : 加入文字在文字檔後方 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_05 // 主類別 public static void main(string args[]) throws IOException String str1 = " 費氏數列是一個無限數列 "; true 代表不要覆蓋原檔內容 FileWriter fw = new FileWriter("c:\\myJava\\ch12\\file\\text2.txt",true); fw.write('\r'); fw.write('\n'); // 寫入換行字元 fw.write(str1); fw.close(); // 關檔 32

17 FileWriter 類別 執行結果 ( 請先執行範例 12-4 後才執行本範例 ) 範例新增的內容 範例說明 : 第 13 行建立 FileWriter 物件 fw 時, 在建構子設定了 append 參數為 true, 因此原始檔案內容不會被覆蓋 第 行為本範例新增的文字, 其中換行字元也需要自行增加 實用範例 12-6 : 複製文字檔 範例 12-6:ch12_06.java( 隨書光碟 myjava\ch12\ch12_06.java) FileWriter 類別 /* 檔名 :ch12_06.java 功能 : 複製文字檔 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_06 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException char cbuf[] = new char[1]; FileReader fr = new FileReader("c:\\myJava\\ch12\\file\\text1.txt"); FileWriter fw = new FileWriter("c:\\myJava\\ch12\\file\\text3.txt"); int num; String str1; while((num = fr.read(cbuf))!=-1) fw.write(cbuf); fr.close(); fw.close(); // 關檔 // 關檔 使用迴圈逐一複製文字檔內容 34

18 FileWriter 類別 執行結果 ( 執行後出現 text3.txt, 內容與 text1.txt 相同 ) 範例說明 : 第 16~17 行使用迴圈逐一複製文字檔內容, 由於 cbuf 的陣列大小為 1, 故一次複製一個字元 緩衝區 讀寫檔案時, 可以採用緩衝區方式進行處理, 減少對磁碟的存取動作 ( 傳統磁碟存取屬於機械動作, 故較慢 ) 所謂緩衝區, 代表的是在記憶體中預留一個空間作為緩衝區, 當進行存取檔案時, 會對緩衝區進行存取 若讀取檔案時, 緩衝區已無資料可讀, 則會從磁碟檔案中載入資料當緩衝區作為寫入使用時, 若緩衝區已滿, 則會自動將資料寫入磁碟檔案中, 以清空緩衝區, 使得程式仍舊可以對緩衝區寫入資料如圖 12-4 示意 而提供緩衝區功能的類別則為 BufferedReader 及 BufferedWriter, 其繼承關係請見圖 12-2,

19 緩衝區 圖 12-4 使用緩衝區讀寫檔案示意圖 緩衝區 BufferedReader BufferedReader 繼承自 Reader 類別, 在執行建構子時, 可以指定對應的檔案及緩衝區大小 建構子如下 : BufferedReader 的建構子 BufferedReader(Reader in) BufferedReader(Reader in, int sz) 語法說明 : 上述建構子可以產生輸入字元串流對應的緩衝區, 雖然 in 參數被宣告為 Reader 類別, 但我們可以傳入 FileReader 類別的物件, 因為 FileReader 是 Reader 的子孫類別 而 sz 參數則為緩衝區的大小 (sz 大小需適中, 否則使用緩衝區的意義不大 ), 若未設定 sz 參數, 則使用預設的緩衝區大小 (JDK1.4 預設為 8192 個字元 ) 38

20 緩衝區 當我們使用緩衝區方式來讀取檔案資料時, 可以透過 BufferedReader 的眾多方法, 進行更方便的讀取動作, 方法如表 12-3 其中有些在 Reader 類別已經被定義, 但在 BufferedReader 類別被改寫, 有些則是新增的方法 : 方法宣告 用途 回傳值說明 void close() 關閉字元串流 無 int read() 讀取單一個字元 -1 代表串流已讀取完畢 其餘正 整數或 0 則代表讀取字元成功 int read(char[] cbuf) 讀取字元串流中的資料, 並將之放入 cbuf 字元陣列中 回傳值為讀取字元的數量,-1 代表串流已讀取完畢 緩衝區 方法宣告 用途 回傳值說明 int read(char[] cbuf, int off, int len) 讀取字元串流中的資料, 將之放入 cbuf 字元陣列, 並由 cbuf[off] 開始存放, 且指定最多讀取 len 個字元 回傳值為讀取字元的數量,-1 代表串流已讀取完畢 long skip(long n) 略過 n 個字元不讀取 實際被略過的字元數量 public String readline() 新增的方法, 可以一次讀取一行字串 回傳一行字串, 若已讀取完畢, 則回傳 null 表 12-3 BufferedReader 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 實用範例 12-7 : 使用緩衝區讀取純文字檔內容, 一次讀取一行直到讀取完畢為止 範例 12-7:ch12_07.java( 隨書光碟 myjava\ch12\ch12_07.java) 40

21 緩衝區 /* 檔名 :ch12_07.java 功能 : 使用緩衝區讀取文字檔 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_07 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException String str1; FileReader fr = new FileReader("c:\\myJava\\ch12\\file\\text1.txt"); BufferedReader bufferin = new BufferedReader(fr); while((str1=bufferin.readline())!=null) System.out.println(str1); fr.close(); // 關檔 每次由緩衝區讀取一行資料 緩衝區 執行結果 : S 王大民 S 郭小志 S 胡小龍 範例說明 : 第 15 行使用 readline() 讀取一行資料, 當文字檔內容讀取完畢, 則會回傳 null 由執行結果可以看出, 讀取該行資料時, 回傳的字串並不包含換行字元 ( 執行結果的換行效果是由 println 產生 ) 42

22 緩衝區 BufferedWriter BufferedWriter 繼承自 Writer 類別, 在執行建構子時, 可以指定對應的檔案及緩衝區大小 建構子如下 : BufferedWriter 的建構子 BufferedWriter(Writer out) BufferedWriter(Writer out, int sz) 語法說明 : 上述建構子可以產生輸出字元串流對應的緩衝區, 雖然 out 參數被宣告 Writer 類別, 但我們可以傳入 FileWriter 類別的物件, 因為 FileWriter 是 Writer 的子孫類別 而 sz 參數則為緩衝區的大小 (sz 大小需適中, 否則使用緩衝區的意義不大 ), 若未設定 sz 參數, 則使用預設的緩衝區大小 (JDK1.4 預設為 8192 個字元 ) 緩衝區 當我們使用緩衝區方式來寫入檔案資料時, 可以透過 BufferedWriter 的眾多方法, 進行更方便的寫入動作, 方法如表 12-4 其中有些在 Writer 類別已經被定義, 但在 BufferedWriter 類別被改寫 ( 僅繼承而未改寫者, 則不列入表內 ), 有些則是新增的方法 : 方法宣告 用途 回傳值說明 void close() 關閉字元串流, 在關閉之前必須進行 flush 動 無 作, 才會將最後一筆資料寫入檔案 void flush() 將緩衝區的內容立刻寫入到檔案 無 void newline() 寫入換行字元 無 void write(char[] cbuf, int off, int len) 將字元陣列由 cbuf[off] 開始寫入 len 個字元到串流緩衝區 無 44

23 緩衝區 方法宣告 用途 回傳值說明 void write(int c) 寫入單一個字元到串流緩衝區 無 void write(string s, int off, int len) 寫入一個字串的第 off~off+len-1 個字元到串流緩衝區 無 表 12-4 BufferedWriter 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 觀念及實用範例 12-8 : 使用緩衝區寫入純文字檔內容, 並且觀察緩衝區大小與 flush() 功能 範例 12-8:ch12_08.java( 隨書光碟 myjava\ch12\ch12_08.java) /* 檔名 :ch12_08.java 功能 : 使用緩衝區寫入文字檔 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_08 // 主類別 public static void main(string args[]) throws IOException String str1 = " 費氏數列如下 :"; char endch[] = 'C','o','n','t','i','n','u','e','.','.','.'; int numf; FileWriter fw = new FileWriter("c:\\myJava\\ch12\\file\\text4.txt"); BufferedWriter bufferout = new BufferedWriter(fw,20); bufferout.write(str1); bufferout.newline(); // 寫入換行字元 寫入緩衝區的大小為 20 個字元 for(int i=1;i<10;i++) numf=fib(i); bufferout.write(numf+" ");//int 與字串連結, 會自動轉型為字串 bufferout.newline(); // 寫入換行字元 bufferout.write(endch); bufferout.flush(); // 重要, 請看註解 fw.close(); // 關檔 public static int Fib(int n) if((n==1) (n==0)) return n; else return Fib(n-1)+Fib(n-2); 46

24 緩衝區 執行結果程式執行完畢, 會在 c:\myjava\ch12\file\ 目錄下產生 text4.txt 檔, 內容如下 範例說明 : (1) 第 18 行利用 newline() 函式寫入該作業系統認定的換行字元 (2) 第 15 行建立的緩衝區大小為 20 因此, 欲寫入的全部資料將大於緩衝區的大小 第 26 行, 利用 flush() 函式要求立即將緩衝區的內容寫入檔案, 然後在第 27 行關閉檔案 若將第 26 行設定為註解, 則執行結果中, 最後面的... 三個字元將不會被寫入檔案內, 讀者可以自行測試看看 緩衝區 小試身手 12 3 (3) 由這個範例, 我們可以得知, 緩衝區資料寫入檔案的時機可以分為 (1) 當緩衝區已滿時, 自動寫入檔案內 (2) 透過 flush() 強制立即將緩衝區內的資料寫入檔案 無論使用那一種方式寫入檔案, 緩衝區在資料被寫入檔案後, 都將被清空, 以便容納新寫入的資料 (4) 緩衝區的大小決定了檔案的寫入次數, 例如若將本範例第 15 行的緩衝區大小設定為 1, 則第 26 行可以省略, 因為緩衝區一旦寫入資料就會立刻額滿而必須自動寫入檔案中, 這樣一來, 是否使用緩衝區就變得沒有意義 ( 因為無法減少實際寫入檔案的次數 ), 但若將緩衝區設定過大, 則必須系統提供夠多的記憶體可使用, 因此適中的緩衝區大小必須視系統執行環境以及資料量的大小來決定, 若無法預測者, 建議還是使用預設的緩衝區大小即可 請將範例 12 8 的第 26 行改為註解, 然後重新編譯與執行, 看看會獲得什麼結果? 48

25 12.3 位元串流的檔案處理 有些檔案的內容並非文字, 例如圖檔等, 此時要讀寫此類檔案則應該使用位元串流 InputStream 與 OutputStream 類別是以位元串流方式來處理檔案, 這兩個類別提供了關於讀寫檔案的基本成員方法, 如表 位元串流的檔案處理 同樣地, 我們無法直接使用這兩個類別的物件, 而是使用其衍生類別的物件進行實際的讀寫工作 當然, 由於這些類別繼承自 InputStream/OutputStream 類別, 因此也可以使用表 的各種成員方法 而在 Java 中讀取位元串流將以 位元組 為基本單位, 而非位元 但位元組也是由位元構成, 因此一般我們仍以位元串流來稱呼 50

26 12.3 位元串流的檔案處理 方法宣告 用途 回傳值說明 int available() 取得串流內可讀取或可略過的位元組數量 通常可用來 串流內可讀取或可略過的位元組數量 代表檔案大小 void close() 關閉位元串流 無 abstract int read() int read(byte[] b) int read(byte[] b, int off, int len) 讀取串流內的一個位元組資料 讀取位元串流中的資料, 將之放入 b 位元組陣列 讀取位元串流中的資料, 將之放入 b 位元組陣列, 並由 b[off] 開始存放, 且指定最多讀取 len 個位元組 回傳值代表為讀取位元組的值 (0~255), 若回傳 -1 代表串流已讀取完畢 回傳值為讀取位元組的數量,-1 代表串流已讀取完畢 回傳值為讀取位元組的數量,-1 代表串流已讀取完畢 long skip(long n) 略過 n 個位元組不讀取 實際被略過的位元組數量 表 12-5 InputStream 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 位元串流的檔案處理 方法宣告 用途 回傳值說明 void close() 關閉位元串流 無 void flush() 將緩衝區的內容寫入到檔案 當使用緩衝區時, 必須記得使用此方法, 否則資料僅會存放在串流中而不會寫入到檔案內 無 void write(byte[] b) 將 b 位元組陣列的內容寫入串流 無 void write(byte[] b, int off, int len) 將位元組陣列由 b[off] 開始寫入 len 個位元組到串流 abstract void write(int b) 寫入單一個位元組到串流 (b 的前 24 位元忽略 ) 無 無 表 12-6 OutputStream 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 52

27 12.3 位元串流的檔案處理 同樣地, 由於 InputStream/OutputStream 類別的某些成員方法被宣告為 abstract, 因此無法直接產生物件, 必須繼承後改寫實作這些 abstract method 才能產生物件 而我們一般都是使用 InputStream/OutputStream 類別的衍生類別來產生物件, 並且這些衍生類別已經實作了 abstract method, 並不需要我們自行實作 FileInputStream 與 FileOutputStream 類別 FileInputStream 與 FileOutputStream 分別為 InputStream/OutputStream 的子類別 ( 見圖 12-3) 我們將使用 FileInputStream 與 FileOutputStream 作為讀取與寫入檔案的主要類別, 因此, 可使用的方法也包含父類別的方法 請特別注意, 使用位元串流可以讀取非文字檔, 也可以讀取文字檔, 因為文字檔在檔案中仍舊是以位元方式存在, 只不過文字檔的位元組存放方式具有特殊排列的意義, 而當使用位元串流讀取檔案資料時, 我們通常不關心位元組資料的實際意義 54

28 FileInputStream 與 FileOutputStream 類別 同樣地, 對於一般檔案的讀寫動作也是分為三個步驟 : 分別是開檔 讀寫 關檔 其中, 開檔動作包含在建立檔案物件時的建構子 FileInputStream 的建構子 FileInputStream(File file) FileInputStream(FileDescriptor fdobj) FileInputStream(String name) // 上述建構子會拋出 FileNotFoundException 例外, 它是 IOException 例外類別的子類別 語法說明 : 同樣地, 本書僅介紹第三類建構子 FileInputStream (String name), 其中,name 為代表檔案路徑及檔名的字串, 我們可以使用絕對路徑或相對路徑來表示 FileInputStream 與 FileOutputStream 類別 FileOutputStream 的建構子 FileOutputStream(File file) FileOutputStream(File file, boolean append) FileOutputStream(FileDescriptor fdobj) FileOutputStream(String name) FileOutputStream(String name, boolean append) // 上述建構子會拋出 IOException 例外 語法說明 : 同樣地, 本書僅介紹後兩類建構子, 其中,name 為代表檔案路徑及檔名的字串, 而 append 則是指定 是否覆蓋檔案原有內容, 若欲覆蓋原有檔案內容, 則將之設定為 false 或不設定 ; 若希望將新資料加在舊有資料後面, 則設定為 true 實用範例 12-9 : 透過位元串流複製圖片檔 範例 12-9:ch12_09.java( 隨書光碟 myjava\ch12\ch12_09.java) 56

29 FileInputStream 與 FileOutputStream 類別 /* 檔名 :ch12_09.java 功能 : 複製檔案 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_09 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException byte bytedata[] = new byte[1]; FileInputStream fi = new FileInputStream("c:\\myJava\\ch12\\file\\pic1.jpg"); FileOutputStream fo = new FileOutputStream("c:\\myJava\\ch12\\file\\pic2.jpg"); int filesize=fi.available(); int num; while((num = fi.read(bytedata))!=-1) 使用迴圈逐一複製每一 fo.write(bytedata); 個位元組 System.out.println(" 檔案大小 =" + filesize + " 位元組複製完畢 "); fi.close(); // 關檔 fo.close(); // 關檔 FileInputStream 與 FileOutputStream 類別 pic1.jpg( 隨書光碟 myjava\ch12\file\pic1.jpg) 圖檔大小 58

30 FileInputStream 與 FileOutputStream 類別 執行結果 : 檔案大小 =20700 位元組複製完畢 範例說明 : (1) 範例執行完畢, 會在 myjava\ch12\file\ 目錄中出現 pic2.jpg 檔, 大小同為 位元組 (2) 因 bytedata 位元組陣列大小被宣告為 1, 因此最多只能存放一個位元組, 第 16~17 行透過迴圈, 每次複製一個位元組資料 (3) 第 14 行,available() 函式回傳串流中可供讀取的最大位元組數量 讀寫 BMP 圖片檔 在前面我們曾經提及, 圖片檔屬於二進位檔, 事實上, 眾多圖片檔所存放的格式皆有所不同其中 BMP 檔為點陣圖 BMP 檔的內容包含了表頭資訊與像素資訊兩部分, 我們首先可透過檔案總管觀察圖檔的大小如下 就該圖為例,PG30009.bmp 是 24 位元色彩的 BMP 圖檔, 檔案大小為 102,774 位元組, 由於寬與高為 =34,240, 而每一個像素點佔用 3 個位元組 (24bits), 故要存放所有像素點必須使用 34,240 3=102,720 個位元組這和 102,774 仍相差了 54 個位元組, 這 54 個位元組即為表頭資訊 60

31 讀寫 BMP 圖片檔 1 滑鼠游標移到圖檔上方, 可觀測寬與高 2 點選圖檔按下滑鼠右鍵, 執行快顯功能表的 內容 指令 3 檔案大小 讀寫 BMP 圖片檔 BMP 圖檔的表頭資訊分為兩大部分 第一段佔用 14 個位元組 ( 例如檔案大小記錄於此區間 ) 第二段佔用 40 個位元組 ( 例如寬與高記錄於此區間 ) 詳細資訊整理如表 12-7 位元組編號 ( 第一段 ) 代表點陣圖的標識 說明 #0 1 這兩個位元組固定為 424DH, 對應 ASCII 則為 BM #2 5 代表檔案大小 #6 9 保留 ( 因此皆為 0), 可作為往後擴充使用 #10 13 記錄圖形資料的起始位址 62

32 讀寫 BMP 圖片檔 位元組編號 ( 第二段 ) 說明一個常數值, 用來描述影像區塊的大小 #14 17 在不同的系統中, 常數值並不相同, 在 Windows 中為 28H #18 21 點陣圖的寬度 ( 以像素點數量表示 ) #22 25 點陣圖的高度 ( 以像素點數量表示 ) #26 27 彩色平面數, 通常為 1 ( 十六色影像則為 4) #28 29 每個像素的顏色位元數, 亦即深度 常用值是 1 4 8( 灰階 ) 和 24( 全彩 ) #30 33 記錄所使用的壓縮演算法, 可能的值為 若未壓縮則其值為 0;JPEG 壓縮則為 4 #34 37 實際圖形檔的字組大小 #38 41 圖像水平解析度 ( 單位為像素 / 英吋 ) #42 45 圖像垂直解析度 ( 單位為像素 / 英吋 ) #46 49 所用顏色數目 #50 53 保存所用重要顏色數目 若每個顏色都同等重要時, 則與顏色數目相等 表 12-7 BMP 圖檔的表頭資訊 (54 個位元組 ) 想要觀察上述的 PG30009.bmp 點陣圖內容, 可透過 debug 指令或 UltraEdit 等軟體開啟它, 通常會以 16 進制表示各位元組內容, 如下圖 : 讀寫 BMP 圖片檔 #02~#05 等四個位元組為檔案大小 #18~#21 等四個位元組為圖片寬度 #22~#25 等四個位元組為圖片高度 圖 11-5 觀察點陣圖 BMP 檔內容 請注意, 當以四個位元組代表一組資料時, 必須反過來觀看例如圖檔之大小顯示為 , 實際上應該是 H 個位元組 = 102,774 個位元組 64

33 讀寫 BMP 圖片檔 觀念及實用範例 : 在 BMP 檔的表頭資訊中, 取出檔案大小的資訊 範例 12-10:ch12_10.java( 隨書光碟 myjava\ch12\ch12_10.java) /* 檔名 :ch12_10.java 功能 : 讀取二進位檔圖檔資料 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_10 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException byte data[] = new byte[54]; int filesize,value1,value2,value3,value4,low,high; FileInputStream fi = new FileInputStream("c:\\myJava\\ch12\\file\\PG30009.bmp"); int filesize=fi.available(); int num; 讀寫 BMP 圖片檔 num = fi.read(data,0,54); int title[] = new int[6]; for(int i=2;i<5;i++) if(data[i]<0) title[i]=(int)data[i]+256; else title[i]=(int)data[i]; low=title[2]%16; high=(title[2]-low)/16; value1=high*16+low; low=title[3]%16; high=(title[3]-low)/16; value2=high*16*16*16+low*16*16; // 讀取前 54 個位元組 low=title[4]%16; high=(title[4]-low)/16; value3=high*16*16*16*16*16+low*16*16*16*16; 若資料 >127(3FH), 則會被判定為負值, 所以需要修正為正值 66

34 讀寫 BMP 圖片檔 low=title[5]%16; high=(title[5]-low)/16; value4=high*16*16*16*16*16*16*16+low*16*16*16*16*16*16; filesize=value1+value2+value3+value4; System.out.println(" 檔案大小為 " + filesize + " 個位元組 "); fi.close(); // 關檔 執行結果 : 範例說明 : 檔案大小為 個位元組 (1) 第 11 行, 宣告一個大小為 54 的陣列 data, 陣列元素資料型態為 byte, 其元素只佔用一個位元組, 元素值介於 -128~+127, (2) 第 17 行 : 使用 read 函式讀取檔案的前 54 個位元組資料, 並存入 data 陣列中 (3) 第 19~45 行 : 由前面的介紹可以得知檔案大小之資訊存放在 data[2]~data[5] 之中, 但我們必須轉換進制才能求得正確之檔案大小 轉換時必須注意, 每一個位元組若大於 127, 也就是十六進制的 3F, 會被認為負值, 因此計算前要先修正為正值 緩衝區 一般檔案透過位元串流讀寫時, 同樣可以採用緩衝區方式進行處理, 以改善存取效率 而對應提供緩衝區功能的類別則為 BufferedInputStream 及 BufferedOutputStream, 其繼承關係請見圖 12-3 BufferedInputStream BufferedInputStream 繼承自 FilterInputStream, 而 FilterInputStream 繼承自 InputStream 在執行建構子時, 可以指定對應的檔案及緩衝區大小 建構子如下 : BufferedInputStream 的建構子 BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size) 68

35 緩衝區 語法說明 : 上述建構子可以產生輸入位元串流對應的緩衝區,in 參數代表對應的位元串流 而 size 參數則為緩衝區的大小 (size 大小需適中, 否則使用緩衝區的意義不大 ), 若未設定 size 參數, 則使用預設的緩衝區大小 (JDK1.4 預設為 2048 個位元組 ) 緩衝區 當我們使用緩衝區方式來讀取檔案資料時, 可以透過 BufferedInputStream 及其父類別 FilterInputStream 的眾多方法, 進行更方便的讀取動作,BufferedInputStream 的方法如表 12-8 其中有些在父類別或祖父類別已經被定義, 但在 BufferedInputStream 類別被改寫, 有些則是新增的方法 : 70

36 緩衝區 方法宣告 用途 回傳值說明 int available() 取得串流內可讀取或可略過的位元組數 串流內可讀取或可略過的 量 通常可用來代表檔案大小 位元組數量 void close() 關閉位元串流 無 int read() 讀取單一個位元組 -1 代表串流已讀取完畢 其餘 0~255 則為所讀取的 位元組 int read(byte[] b, int off, int len) 讀取位元串流中的資料, 將之放入 b 位元組陣列, 並由 b[off] 開始存放, 且指定最多讀取 len 個位元組 回傳值為讀取位元組的數量,-1 代表串流已讀取完畢 long skip(long n) 略過 n 個位元組不讀取 實際被略過的位元組數 量 表 12-8 BufferedInputStream 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 緩衝區 BufferedOutputStream BufferedOutputStream 繼承自 FilterOutputStream, 而 FilterOutputStream 繼承自 OutputStream 在執行建構子時, 可以指定對應的檔案及緩衝區大小 建構子如下 : BufferedOutputStream 的建構子 BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out, int size) 語法說明 : 上述建構子可以產生輸出位元串流對應的緩衝區,out 參數為對應的位元串流 而 size 參數則為緩衝區的大小, 若未設定 size 參數, 則使用預設的緩衝區大小 (JDK1.4 預設為 512 個位元組 ) 72

37 緩衝區 當我們使用緩衝區方式來寫入檔案資料時, 可以透過 BufferedOutputStream 的眾多方法, 進行寫入動作, 方法如表 12-9 這些方法都在父類別及祖父類別已經被定義, 而 BufferedOutputStream 類別將之繼承或改寫 : 方法宣告 用途 回傳值說明 void flush() 將緩衝區的內容立刻寫入到檔案 無 void write(byte[] b, int off, int len) 將位元組陣列由 b[off] 開始寫入 len 個位 無 元組到串流緩衝區 void write(int b) 寫入特定位元組資料到串流緩衝區 無 表 12-9 BufferedOutputStream 的常用成員方法 ( 上述方法會拋出 IOException 例外 ) 緩衝區 實用範例 : 使用位元串流搭配緩衝區讀取文字檔內容, 並寫入另一個檔案中 範例 12-11:ch12_11.java( 隨書光碟 myjava\ch12\ch12_11.java) /* 檔名 :ch12_11.java 功能 : 複製並輸出檔案 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_11 // 主類別 public static void main(string args[]) throws IOException,FileNotFoundException FileInputStream fi = new FileInputStream("c:\\myJava\\ch12\\file\\text1.txt"); 74

38 緩衝區 FileOutputStream fo = new FileOutputStream("c:\\myJava\\ch12\\file\\text5.txt"); BufferedInputStream bufin = new BufferedInputStream(fi); BufferedOutputStream bufout = new BufferedOutputStream(fo); int filesize=fi.available(); byte bytedata[] = new byte[filesize]; bufin.read(bytedata,0,filesize); bufout.write(bytedata,0,filesize); 轉換位元組陣列為字串 String str1 = new String(byteData); bufout.flush(); // 記得要 flush, 否則串流內資料不會寫入檔案中 System.out.println(" 檔案複製完畢, 內容如下 "); System.out.println(str1); fi.close(); // 關檔 fo.close(); // 關檔 執行結果 : 檔案複製完畢, 內容如下 S 王大民 S 郭小志 S 胡小龍 緩衝區 範例說明 : (1) 程式執行完畢, 會出現 text5.txt, 內容與 text1.txt 完全相同 這說明了位元串流也可以用來讀取 複製文字檔 因為不論是任何檔案, 都是以 0 1 位元模式存在於檔案系統中 只不過該 0 1 位元是否具有某種編碼格式的差異罷了 (2) 第 19 行將位元組陣列內容轉換為字串 如果您將本範例的來源檔設定為圖檔 pic1.jpg, 則轉換出來的字串我們並無法解讀 ( 會是一連串的亂碼 ), 因為那是以 jpg 格式編碼的資料, 而非文字資料, 但您只要更改複製目標檔的副檔名為 jpg, 就能用看圖軟體顯示該檔案格式, 因為看圖軟體看得懂 jpg 格式編碼的資料 76

39 序列化 (Serialization) 一般檔案與文字檔最大的差別在於文字檔是所有純文字編輯器都可以輕鬆解讀的檔案, 它可能使用 Unicode 與 ASCII 或其他編碼方式, 但無論如何, 要解讀純文字檔是非常容易的 而一般檔案則只有熟悉該檔案編碼邏輯的程式設計師 ( 或程式 ) 才能夠正確解讀, 例如圖檔可以由看圖程式解讀因此, 非文字檔較具有保密性 所以, 某些遊戲將遊戲進度等採用非文字檔方式存放, 這樣一來, 不但可以於電源消失時保有資料, 對於一般人或編輯器而言, 也無法解讀檔案內的資料 這樣做的好處在於, 遊戲資料不致被其他人快速破解而違背或喪失遊戲原本的規劃 序列化 類似地, 對於寫入非文字檔格式,Java 提供了一種 序列化 機制, 它可以將物件完整寫入檔案中 ( 採用位元串流方式 ), 等到其他程式需要時, 則可以將之取出, 而一般人若要直接閱讀檔案, 則無法理解檔案內的物件資料 因此, 當物件需要存放於磁碟或於網路中傳輸時, 通常會使用序列化技術來完成 78

40 序列化 Java 序列化功能的相關技術最主要的是 Serializable 介面, 任何類別只要實作 Serializable 介面就可以享有預設序列化功能 而預設序列化則提供了最基本的完整寫入物件以及完整讀取物件的能力 至於更進階的序列化設計則超越本書介紹範圍, 暫且不提 雖然採用位元串流的序列化提供了非文字檔的一般保密性, 但它並不是絕對的保密, 對於有經驗的 Java 程式設計師而言, 仍舊可能讀取這些物件資料而預設的序列化寫入物件功能, 只提供了完整寫入物件的功能 ( 包含被宣告為 private 的資料 ), 如果您不想要某些私有資料因此被竊取, 可以利用 transient 關鍵字, 強迫它在寫入物件時不被寫入, 而由於未被寫入, 因此也就不會被讀取 序列化 readobject() 與 writeobject() 是執行讀取與寫入物件的 methods, 類別只要提供了這兩個 methods, 當進行序列化時, 這兩個 methods 就會自動發生作用 而本章重點在於檔案的讀寫, 對於位元串流而言, 有兩個重要的類別分別可以用來讀取及寫入物件, 分別是 ObjectInputStream 與 ObjectOutputStream 類別, 而它們分別提供了 readobject() 與 writeobject() 方法 80

41 序列化 ObjectOutputStream 類別與 writeobject() 方法由圖 12-3 中, 我們可以發現 ObjectOutputStream 類別繼承自 OutputStream 類別, 其建構子及 writeobject() 方法分別如下 : ObjectOutputStream(OutputStream out) // ObjectOutputStream 建構子 void writeobject(obecjt obj) // 寫入物件到位元串流 ObjectInputStream 類別與 readobject() 方法由圖 12-3 中, 我們可以發現 ObjectInputStream 類別繼承自 InputStream 類別, 其建構子及 readobject() 方法分別如下 : ObjectInputStream(InputStream in) Object readobject() // ObjectInputStream 建構子 // 由位元串流讀出物件並回傳 序列化 接下來, 我們直接透過兩個範例來理解物件序列化的功能, 首先我們將寫入物件, 然後再由另一個範例讀取該物件 觀念範例 : 使用序列化寫入物件 範例 12-12:ch12_12.java( 隨書光碟 myjava\ch12\ch12_12.java) /* 檔名 :ch12_12.java 功能 : 序列化 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_12 // 主類別 public static void main(string args[]) throws IOException FileOutputStream fo = new FileOutputStream("c:\\myJava\\ch12\\file\\file6.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fo); 82

42 序列化 oos.writeobject(new CMyStudent("S "," 王大民 ",89,84,75)); oos.writeobject(new CMyStudent("S "," 郭小志 ",77,69,87)); oos.writeobject(new CMyStudent("S "," 胡小龍 ",65,68,77)); oos.close(); fo.close(); // 關檔 class CMyStudent implements Serializable private String id; private String name; private int scorecomputer; private int scoremath; private int scoreenglish; private int scoresum; CMyStudent 實作 Serializable 介面 public CMyStudent(String str1,string str2,int i,int j,int k) id=str1; name=str2; scorecomputer=i; scoremath=j; scoreenglish=k; computesum(); 序列化 84

43 序列化 public void computesum() scoresum=scorecomputer+scoremath+scoreenglish; public void printsum() // 空敘述 執行結果 :( 執行完畢產生 file6.tmp 檔 ) 範例說明 : (1) 第 23~49 行為自定的 CMyStudent 類別, 包含資料 建構子 兩個成員方法 其中 printsum() 方法為空的敘述 序列化 (2) 第 14~16 行透過 writeobject() 將三個物件寫入位元串流, 由於未使用緩衝區, 故會馬上寫入 file6.tmp 檔案內 若直接透過純文字編輯器觀看 file6.tmp, 會出現一些亂碼, 如果使用 UntraEdit 等編輯器開啟 file6.tmp, 則可以看見實際存在的位元資料, 但解讀不易若讀者有興趣, 可以在網路上參閱 侯捷所著之 Java 的物件永續之道 文章, 當中有解析實際存入物件時的格式細節 不論如何, 對於一般使用者而言,file6.tmp 已經具備一些保密性 我們將於下一個範例中, 讀出這些物件 86

44 序列化 觀念範例 : 使用序列化讀出物件 範例 12-13:ch12_13.java( 隨書光碟 myjava\ch12\ch12_13.java) /* 檔名 :ch12_13.java 功能 : 序列化 */ package myjava.ch12; import java.lang.*; import java.io.*; public class ch12_13 // 主類別 public static void main(string args[]) throws IOException,ClassNotFoundException FileInputStream fi = new FileInputStream("c:\\myJava\\ch12\\file\\file6.tmp"); ObjectInputStream ois = new ObjectInputStream(fi); CMyStudent obj1; 序列化 obj1=(cmystudent)ois.readobject(); obj1.printsum(); obj1=(cmystudent)ois.readobject(); obj1.printsum(); obj1=(cmystudent)ois.readobject(); obj1.printsum(); ois.close(); fi.close(); // 關檔 class CMyStudent implements Serializable private String id; private String name; private int scorecomputer; private int scoremath; private int scoreenglish; private int scoresum; 88

45 序列化 public CMyStudent(String str1,string str2,int i,int j,int k) id=str1; name=str2; scorecomputer=i; scoremath=j; scoreenglish=k; computesum(); public void computesum() scoresum=scorecomputer+scoremath+scoreenglish; public void printsum() // 修改 method 內容, 但 method 不可或缺 System.out.println(id + " " + name + " 總分 =" + scoresum); 序列化 執行結果 : S 王大民總分 =248 S 郭小志總分 =233 S 胡小龍總分 =210 範例說明 : (1) 由於程式中執行了 readobject(), 而它可能引發 ClassNotFoundException 例外, 故需要在 main() 函式後面加上例外丟出的程式碼 (2) 第 27~55 行為自定的 CMyStudent 類別, 和上一個範例僅有 printsum() 的內容不同 (3) 第 行透過 readobject() 將檔案 ( 位元串流 ) 內的三個物件依序讀出, 並在第 行執行 printsum() 方法, 請注意, 我們編譯及執行範例的順序為編譯 ch12_12.java( 此時會產生 ch12_12.class 與 CMyStudent.class) 執行 ch12_12, 接著再編譯 ch12_13.java( 此時會產生 ch12_13.class 與 CMyStudent.class, 其中 CMyStudent.class 將會覆蓋上一個範例的同一類別檔 ) 執行 ch12_13 故此時執行到 printsum() 時, 會印出總分, 如同執行結果 90

46 序列化 (4) 在這個範例中, 我們可以得知, 重新讀取物件後, 可以重新撰寫某個 method 的內容, 由於讀入的物件資料不包含 method 的原有內容, 因此會執行新的 method 內容 (5) 假設我們省略兩個範例中的任一欄位或任一 method, 則當執行本範例時將會發生執行時期的錯誤, 原因是當存入物件時, 會將所有欄位都寫入, 並且所有的 method 也會寫入, 但不包含 method 內容 (6) 由這個範例可以發現, 除非程式設計師知道原有物件的所有欄位及 method, 否則將無法正確讀出存放於檔案內的物件, 因此具有保密性 本章回顧 在本章中, 我們介紹了 Java 對於檔案存取的支援技術, 對於 Java 而言, 檔案存取是透過串流來完成, 而串流又分為字元串流與位元串流 其中, 字元串流只能用來讀寫純文字檔, 而位元串流則無限制 不過, 對於存取文字檔而言, 使用字元串流可以使用更多好用的成員方法, 方便撰寫程式 92

47 12.4 本章回顧 字元串流對應的類別為 Reader/Writer 類別及其子孫類別, 而位元串流對應的類別則為 InputStream/OutputStream 類別及其子孫類別 除了在進行串流讀寫時, 立即反應於檔案外, 我們也可以透過緩衝區來改善程式的效率 也就是藉由緩衝區減少對檔案的讀寫次數, 由於記憶體的存取時間較磁碟快許多, 因此, 我們可以利用緩衝區改善效率 本章回顧 不過在寫入資料時, 記得要在關閉檔案前執行 flush(), 強迫將緩衝區剩餘的資料寫入檔案, 否則有可能會遺失最後的資料 除了寫入一般資料外, 我們也可以透過 Java 提供的序列化技術寫入物件到檔案中, 於日後程式需要時再將之讀出 由於採用的是位元串流方式寫入, 因此具有保密性, 並且由於讀出時, 必須了解當時類別的詳細規格, 因此, 即使是程式設計師, 也不容易竊取物件資料 讀寫檔案可能會發生例外的狀況, 因此我們可以自行處理例外或在方法後面以 throws 標記, 將例外轉交給呼叫 method 的程式來處理而 JDK7 為了方便程式設計師處理這類因資源存取而發生的例外, 也提供了 try-with-resources 機制 94

48 12.4 本章回顧 檔案不但是永久保存資料的方式, 也是大型程式常見的暫存中繼格式, 而 Java 對於檔案採用的串流概念, 也將適用於網路程式, 因為對於 Java 而言, 這些資料都是由外部提供, 而非原本就存在於記憶體中 礙於篇幅所限, 若讀者對於串流方式有更進一步的需求, 可以查閱 Java I/O 的專書 若對於網路程式設計有興趣, 可以參閱 網路程式設計初學指引 - 使用 Java 一書 95 本章結束 Q&A 討論時間 96

Microsoft Word - 投影片ch14

Microsoft Word - 投影片ch14 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十四章檔案處理 本章學習目標認識串流學習檔案的開啟與關閉學習如何處理文字檔學習如何處理二進位檔 檔案處理 14-2 14.1 關於串流 串流可分為 輸入串流 (input stream) 與 輸出串流 (output stream) 兩種 下圖說明了串流如何做為檔案處理的橋樑 : stream 資料 input stream

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj Message Transition 5-1 5-2 DataInputStream Class 5-3 DataOutputStream Class 5-4 PrintStream Class 5-5 (Message Transition) (Exercises) Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream

More information

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式]

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式] Java Basics Hi Hsiao-Lung Chan, Ph.D. Dept Electrical Engineering Chang Gung University, Taiwan chanhl@maili.cgu.edu.twcgu 執行環境 - eclipse 點選 eclipse 軟體執行檔 設定工作路徑 eclipse 開啟 2 建置 Java 專案 File New project

More information

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v 第九章 Java I/O 流操作 实验目的 (1) 掌握文本文件的读写方法 (2) 掌握 InputStream OutputStream 的使用方法 (3) 熟悉 FileReader,BufferedReader,InputStreamReader 和 FileWriter, BufferedWriter, PrintWriter 的使用方法 ; 理解使用过滤流实现数据项的读写 :DataOutputStream,

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

第1章

第1章 第 12 章 資料檔案管理 1 本章提要 12.1 前言 12.2 資料讀取 Reader/InputStream 12.2.1. Reader/InputStream 12.2.2. System 類別 12.3 資料建檔 Writer/OutputStream 12.4 資料修改 RandomAccessFile 12.5 變更及移動檔案 12.6 檔案列表 12.7 後記 2 12.1 前言

More information

Microsoft Word - newJavaA4.doc

Microsoft Word - newJavaA4.doc P74 拾壹. 基本輸入與輸出 一. 使用的物件 1.Java 的輸入與輸出會使用到 Java.lang 套件中的 System 類別與 Java.io 套件, 其中 Java.io 套件中以 Reader/Writer 與 InputStream/OutputStream 類別最 重要, 前者以字元 (Character) 為導向, 後者以位元組 (Byte) 為導向 2.System 類別中最主要宣告了三個類別物件,System.in

More information

Microsoft Word - JAVA Programming Language Homework VI_ans.doc

Microsoft Word - JAVA Programming Language Homework VI_ans.doc JAVA Programming Language Homework VI: Threads & I/O ID: Name: 1. When comparing java.io.bufferedwriter to java.io.filewriter, which capability exists as a method in only one of the two? A. Closing the

More information

Microsoft PowerPoint - C-Ch12.ppt

Microsoft PowerPoint - C-Ch12.ppt 檔案的輸入 輸出 12-1 輸入 輸出的基礎 理解資料流 (stream) 的概念 在 C 語言中支援各種輸出入功能的概念, 就稱為資料流 執行附加格式的輸入 輸出 printf() 和 scanf() 是用來輸出 輸入的函數 必須先引入 stdio.h 檔案才能使用這些函數 這兩個函數會以固定的格式進行輸出入, 也可以使用各種不同的轉換規格 使用固定格式的輸出 輸入函數之範例 : int main(void)

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

OOP with Java 通知 Project 6: 5 月 30 日晚 9 点

OOP with Java 通知 Project 6: 5 月 30 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 6: 5 月 30 日晚 9 点 复习 异常处理 语法 抛出异常 : throw 处理异常 : try, catch 异常对象 : Exception 类的子类 从方法中抛出异常 方法的异常说明 :throws 中断当前方法的执行, 返回抛出的异常对象, 在该方法的调用路径上寻找合适的

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

第1章

第1章 第 15 章 標準類別 1 本章提要 15.1 前言 15.2 基本資料類別介紹 15.3 Integer 類別 15.4 Double 類別 15.5 Float 類別 Long 類別 Short 類別 15.6 數學相關類別 Math 15.7 後記 2 15.1 前言 不同基本資料型別可以互相轉換, 但也只予許由小轉大的情況, 例如 1. byte 轉為 short int long float

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1 0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0

More information

Microsoft Word - JAVA Programming Language Homework I ans

Microsoft Word - JAVA Programming Language Homework I ans JAVA Programming Language Homework I - OO concept Student ID: Name: 1. Which of the following techniques can be used to prevent the instantiation of a class by any code outside of the class? A. Declare

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23 Java 程 序 设 计 实 验 指 导 书 商 丘 学 院 计 算 机 科 学 与 技 术 学 院 张 艳 晓 目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23 实 验

More information

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h 資訊系統與實習 製作 : 林郁君 一 2009.09.28 9X9 'button 被按下後 ' Dim i, j As Integer For i = 1 To 9 'i 從 1 到 9' For j = 1 To 9 'j 從 1 到 9' If j * i < 10 Then ' 如果 j 乘上 i 是為個位數 ' Response.Write(i & "*" & j & " =" & i *

More information

2009年9月全国计算机等级考试二级Java真题及答案

2009年9月全国计算机等级考试二级Java真题及答案 2009 年 9 月 全 国 计 算 机 等 级 考 试 二 级 Java 真 题 及 答 案 [ 录 入 者 :NCRE100 时 间 :2009-10-08 19:41:34 作 者 : 来 源 :NCRE100.com 浏 览 :1421 次 ] 2009 年 9 月 全 国 计 算 机 等 级 考 试 二 级 笔 试 试 卷 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟,

More information

Swing-02.pdf

Swing-02.pdf 2 J B u t t o n J T e x t F i e l d J L i s t B u t t o n T e x t F i e l d L i s t J F r a m e 21 2 2 Swing C a n v a s C o m p o n e n t J B u t t o n AWT // ToolbarFrame1.java // java.awt.button //

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

OOP with Java 通知 Project 6: 5 月 24 日晚 9 点

OOP with Java 通知 Project 6: 5 月 24 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 6: 5 月 24 日晚 9 点 复习 异常处理 语法 抛出异常 : throw 处理异常 : try, catch 异常对象 : Exception 类的子类 从方法中抛出异常 方法的异常说明 :throws 中断当前方法的执行, 返回抛出的异常对象, 在该方法的调用路径上寻找合适的

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

OOP with Java 通知 Project 6: 6 月 6 日晚 9 点

OOP with Java 通知 Project 6: 6 月 6 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 6: 6 月 6 日晚 9 点 复习 异常处理 语法 抛出异常 : throw 处理异常 : try, catch 异常对象 : Exception 类的子类 从方法中抛出异常 方法的异常说明 :throws 中断当前方法的执行, 返回抛出的异常对象, 在该方法的调用路径上寻找合适的

More information

第1章

第1章 第 7 章 字串 1 本章提要 7.1 前言 7.2 類別與物件 7.3 String 類別 7.4 StringBuffer 類別 7.5 綜合練習 7.6 後記 2 7.1 前言 Java 用 String 類別 (Class) 來處理字串, String 類別是 Java 類別庫內建的類別, 它是一堆已經寫好的程式, 我們可以直接拿來使用字串很像字元型別的一維陣列, 字串裡能存放的資料都屬於字元性質,

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

Microsoft Word - 投影片ch13

Microsoft Word - 投影片ch13 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十三章例外處理 本章學習目標了解什麼是例外處理認識例外類別的繼承架構認識例外處理的機制學習如何撰寫例外類別 例外處理 13-2 13.1 例外的基本觀念 在執行程式時, 經常發生一些不尋常的狀況 例如 : (1) 要開啟的檔案不存在 (2) 陣列的索引值超過了陣列容許的範圍 (3) 使用者輸入錯誤 Java 把這類不尋常的狀況稱為

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

Microsoft PowerPoint - Chap03.ppt [相容模式]

Microsoft PowerPoint - Chap03.ppt [相容模式] 本章目的 2D / 3D 遊戲程式設計入門使用 XNA 3.0 與 C# 探討 XNA 遊戲程式內部的基本架構與遊戲開發流程 示範如何完成一個簡單的 XNA 遊戲方案 第三章 XNA 遊戲程式基本架構 1 2 新增 XNA 專案 新增 XNA 專案 3 4 XNA 相關的命名空間 Game1.cs 程式中的六個函數 using Microsoft.Xna.Framework; // 和 XNA 架構相關的型別

More information

Microsoft Word - Mail2000_SecurityPatch_

Microsoft Word - Mail2000_SecurityPatch_ Mail2000 安全性加強程式 網擎資訊軟體股份有限公司謹呈 1 Mail2000 安全性加強程式 Introduction Mail2000 安全性加強程式, 是針對 Mail2000 V4.0 以上版本, 包括 V4.0 及 V4.5 版本所提供, 以加強系統的安全性, 減少因惡意信件而引起的安全性問題 版本名稱 Mail2000 版本作業系統檔案名稱 V4.0 單一網域版本 V4.0 SDSS

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

Microsoft PowerPoint - 14Threads.ppt

Microsoft PowerPoint - 14Threads.ppt Threads Outline Introduction to Threads How to create Thread extend Thread implement Runnable interface Synchronization What is thread? 定義 : 程式的執行軌跡 Single Thread Multi-Thread 依序執行 int x, y; int z; x =

More information

C/C++ Basics

C/C++ Basics 第 十章 檔案輸入與輸出 講師 : 李根逸 (Ken-Yi Lee), E-mail: feis.tw@gmail.com 265 課程 大綱 與作業系統或其他軟體溝通 (API) [P267] 檔案相關函式表 [P268] 開啟與關閉檔案 (fopen, fclose) 讀寫純 文字檔 (fscanf, fprintf) 讀寫 二進位檔 (fread, fwrite) 前置處理器

More information

46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲

More information

x MapReduce A Italic URL Constant width Constant width bold Constant width italic 這個圖示代表提示或建議 這個圖示代表一般註解

x MapReduce A Italic URL Constant width Constant width bold Constant width italic 這個圖示代表提示或建議 這個圖示代表一般註解 Java R Python Java Java Java x MapReduce A Italic URL Constant width Constant width bold Constant width italic 這個圖示代表提示或建議 這個圖示代表一般註解 第一章 I/O double[][] int[] String[] List 2 Map JavaScript Object Notation

More information

untitled

untitled 1 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object 參 類 都 object 參 object Boxing 參 boxing

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

Microsoft Word - 投影片ch03

Microsoft Word - 投影片ch03 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第三章變數與資料型態 本章學習目標認識變數與常數認識 Java 的基本資料型態學習如何進行資料型態轉換學習如何由鍵盤輸入資料 變數與資料型態 3-2 Java 的資料型態分為 : 與 原始資料型態 (primitive type) 非原始資料型態 (non-primitive type) 原始資料型態包括了整數與浮點數等型態

More information

fsfdsa

fsfdsa 資訊管理學系 授課教師 : 黃元巨博士 第 28 章資料的匯入與匯出 資料匯入方法 Bulk Copy Protocol(BCP) 透過轉換程式來轉換不同檔案格式的資料庫檔案 將資料匯出, 使其成為其它資料庫可接受之特定格式的檔案, 然後再到新的資料庫系統中將資料匯入 透過 XML 敘述展現資料庫中的資料 MySQL 資料匯入的方法 (1) 以批次模式匯入資料 (1) 插入資料的 SQL 敘述存成一個文字檔

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

Microsoft PowerPoint - SE7ch10.ppt

Microsoft PowerPoint - SE7ch10.ppt 第十章例外處理 課前指引通常讀者學習到本章時, 已經有一些撰寫程式的經驗, 您是否覺得當程式實際運作時, 常常會發生一些非預期的錯誤呢? 先別煩惱,Java 為了這些問題提出了解決之道, 本章將為您解決這些問題 章節大綱 10.1 什麼是例外 10.2 例外的種類 10.6 例外的處理與轉交 10.7 巢狀例外 10.3 例外的引發 10.4 例外的處理 10.8 重新丟出例外 10.9 本章回顧

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2 Chapter 02 變數與運算式 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 type 2.2.4 2.3 2.3.1 print 2.3.2 input 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 + 2.4.6 Python Python 2.1 2.1.1 a p p l e b e a r c 65438790

More information

White Sketchpad PowerPoint Presentation

White Sketchpad PowerPoint Presentation 第五章 檔案存取 電商三乙 4A355001 郭雅如 4A355063 周宛萱 5-1-1 取得檔案名稱 但排除副檔名 5-1-2 取得路徑資訊

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4 JAVA Extension 0..\Example\Ch0\ \ T.html..\Example\Ch0\ \ T.txt T.txt..\Example\Ch0\ \ T_Ok.html 提示 :. Marquee Marquee Font Color #FFFFFF BG Color #867bf Width 90 Height 50. T.txt Ctrl+C your scrolling

More information

C/C++ Programming

C/C++ Programming !281 第 十講 檔案輸入與輸出 講師 : 李根逸 (Ken-Yi Lee), E-mail: feis.tw@gmail.com !282 課程 大綱 與作業系統或其他軟體溝通 (API) [P.283] 檔案相關函式表 [P.284] 開啟與關閉檔案 (fopen, fclose) 讀寫純 文字檔 (fscanf, fprintf) 讀寫 二進位檔 (fread, fwrite)

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

Microsoft PowerPoint - 09.Android 程式設計-SQLite

Microsoft PowerPoint - 09.Android 程式設計-SQLite 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 程式設計 -SQLite 國立高雄大學資訊工程學系張保榮教授 大綱 SQLite execsql() 函式 rawquery() 函式 insert() 函式 delet() 函式 update() 函式 query()

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

untitled

untitled 1 Outline ArrayList 類 列類 串類 類 類 例 理 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object

More information

untitled

untitled 立 流 來 了 不 類 不 來 裡 類 都 類 立 更 更 便 論 類 量 論 行 不 易 論 類 領 i ii 論 行了 論 見 論 利 來 益 林 論 都 不 論 林 念 勵 了 樂 不 不論 力 論 iii 錄 錄 錄 錄 論 論 類 類 類 路 iv 類 路 類 類 論 來 參 v 錄 列 類 六 路 vi 錄 行 行 類 類 類 六 類 類 說 說 類 類 六 數 類 路 類 切 類 vii

More information

Microsoft PowerPoint - Chap04.ppt [相容模式]

Microsoft PowerPoint - Chap04.ppt [相容模式] 本章目的 2D / 3D 遊戲程式設計入門使用 XNA 3.0 與 C# 2D 圖形與字型的呈現 介紹 XNA 支援的 2D 圖形格式 介紹 2D 圖形的應用範圍 以多個範例來示範在 XNA 架構下 2D 圖形和字型的呈現方式 介紹 2D 圖形碰撞測試的演算法 1 2 2D 圖形的應用範圍 紋理圖展開的 UV 貼圖 紋理圖 (Texture) 精靈圖 (Sprite) 小張的背景拼圖 大張的背景圖

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆 Autodesk Product Design Suite Standard 20122 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆的產品設計計 Autodesk Product Design Suite Standard 版本中中包括以下軟體體產品

More information

Microsoft PowerPoint - 04-array_pointer.ppt

Microsoft PowerPoint - 04-array_pointer.ppt Array 與 Pointer Array Dynamical Memory Allocation Array( 陣列 ) 陣列是用來存放同樣型態的資料陣列的大小必須在程式中預先設定在程式執行中, 陣列的大小無法改變陣列中的資料是透過索引 (index) 來存取 一維陣列的宣告 type array_name[array_size]; int iarray[100]; /* an integer array

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z0-854 Title : Java Standard Edition 5 Programmer Certified Professional Upgrade Exam Version : Demo 1 / 12 1.Given: 20. public class CreditCard

More information

Microsoft PowerPoint - 13_ClassAndObj.ppt

Microsoft PowerPoint - 13_ClassAndObj.ppt Visual Basic 2005 (VB.net 2.0) 程式設計 講師 : 戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所 第十三章 物件與類別 物件與類別 物件導向程式設計 物件與類別的建立 物件與類別 物件 (object) Ex. 人 屬性 (property) 身高 體重 血型 方法 (method) 走路 跑步 訊息 (message) 交談 事件

More information

Database_001

Database_001 作者 : 林致宇日期 :2011/10/26 主要參考來源 : http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/ 問題 : 如在存取一個已經建立好的資料庫? 解答 : 有一些應用程式會需要讀取已經建立好的資料庫, 例如一個試題測驗應用程式, 裡面的試題可能已經於電腦上, 使用任何的

More information

Microsoft PowerPoint - ch04_AEL0080.ppt

Microsoft PowerPoint - ch04_AEL0080.ppt 4 選擇 在正常的情況下, 電腦程式的執行是以敘述的排列次序逐步處理的 使用控制架構 (control structures) 可以改變這種既定的先後次序, 讓程式得以進行更複雜的運算, 或以更簡潔的指令來實現演算法 1/42 選擇 4.1 演算法的描述方式 4.2 變數的運用範圍 (Scope of variables) 4.3 if- 敘述 4.4 巢狀 if- 敘述 (Nested if statements)

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

Microsoft Word - 投影片ch15

Microsoft Word - 投影片ch15 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十五章多執行緒 本章學習目標認識執行緒學習如何建立執行緒學習如何管理執行緒認識執行緒的同步處理 多執行緒 15-2 15.1 認識執行緒 多執行緒 的機制可以同時執行多個程式區塊 app15_1 是單一執行緒的範例 : 01 // app15_1, 單一執行緒的範例 02 class CTest 03 { 04 private

More information

第1章

第1章 第 8 章 函式 1 本章提要 8.1 前言 8.2 如何定義函式 8.3 函式的呼叫和返回 8.4 傳遞陣列 8.5 方法多載 8.6 遞迴 8.7 綜合練習 8.8 後記 2 8.1 前言 每一種高階程式語言都有提供函式 (Function)( 或稱函數 ) 的功能, 以便將經常使用到的程式功能包裝成函式的形式, 如此一來便能反覆地呼叫該函式來完成某件特定工作在高階程式語言中, 副程式 (Subroutine)

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF> 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

Slide 1

Slide 1 Java 程式設計入門 講師 : 陳昭源 CSIE, NTU August 3, 2005 Outline Character & String Exercise August 3, 2005 Page 2 Character & String 處理字元資料時,Java 有三個類別可供使用 Character: 處理單一字元 String: 處理內容不改變 (immutable) 的字串 StringBuffer:

More information

Microsoft PowerPoint - SE7ch02.ppt

Microsoft PowerPoint - SE7ch02.ppt 第二章 Java 從零開始 (Java 程式的基本結構 ) 課前指引在本章中, 我們將透過一個非常簡單的 Java 程式來說明 Java 的程式結構 章節大綱 2.1 最簡單的 Java 程式範例 2.2 註解 (comment) 2.6 Java 程式的進入點 main( ) 2.7 Java 的敘述 2.3 package 區 2.4 import 區 2.8 println() 輸出方法的簡易使用法

More information

Microsoft PowerPoint - 20-string-s.pptx

Microsoft PowerPoint - 20-string-s.pptx String 1 String/ 1.: char s1[10]; char *s2; char s3[] = "Chan Tai Man"; char s4[20] = "Chan Siu Ming"; char s5[]={'h','e','l','l','o','\0'; 0 1 2 3 4 5 6 7 8 9 10 11 12 s3 C h a n T a i \0 M a n \0 printf

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

Microsoft PowerPoint - ch12.ppt

Microsoft PowerPoint - ch12.ppt 12 資料流與檔案的存取 如果程式所處理的資料只能寫在原始程式內部, 或以互動的方式由鍵盤逐一輸入, 則功能將很有限 本章探討如何從檔案讀取資料, 以及將處理後的資料存入檔案的方法 1/69 資料流與檔案的存取 12.1 12.2 12.3 12.4 12.5 12.6 資料流檔案的存取檔案的存取模式資料的讀取與寫入檔案內容的位置標記將檔案的存取寫成函數 2/69 3/69 資料流 (stream)

More information

PowerPoint Presentation

PowerPoint Presentation Visual Basic 程式設計 檔案存取 檔案控制項元件 File System Objects DriveList 屬性 Drive List ListCount ListIndex 目前磁碟機代碼可選擇磁碟機可選擇磁碟機個數已選擇的磁碟機的位置 事件 Change 所選擇的磁碟機改變時 2 DriveListBox (cont.) Private Sub Drive1_Change() Print

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

Microsoft PowerPoint - P766Ch06.ppt

Microsoft PowerPoint - P766Ch06.ppt PHP5&MySQL 程式設計 第 6 章物件導向 6-1 認識物件導向 物件 (object) 或 案例 (instance) 屬性 (property) 欄位 (field) 或 成員變數 (member variable) 方法 (method) 或 成員函式 (member function) 事件 (event) 類別 (class) 物件導向程式設計 (OOP) 具有下列特點 : 封裝

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

第3章.doc

第3章.doc 3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo

More information