VisualBasic.NET程序設(shè)計教程(下)課件_第1頁
VisualBasic.NET程序設(shè)計教程(下)課件_第2頁
VisualBasic.NET程序設(shè)計教程(下)課件_第3頁
VisualBasic.NET程序設(shè)計教程(下)課件_第4頁
VisualBasic.NET程序設(shè)計教程(下)課件_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Visual Basic.NET程序設(shè)計教程(下)東北大學(xué)軟件學(xué)院第1頁,共143頁。第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 東北大學(xué)軟件學(xué)院第2頁,共143頁。4.1 類和對象4.2 屬性和方法4.3 封裝、繼承、多態(tài)4.4 接口 主要內(nèi)容第3頁,共143頁。3第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 4.1 類和對象類就是對具有相同數(shù)據(jù)和相同操作的一組相似對象的定義,也即是對具有相同屬性和行為的一組相似對象的抽象。類是用來創(chuàng)建對象的模板,它包含所創(chuàng)建對象的狀態(tài)描述和方法定義,而對象只是類的一個實例。對象是客觀世界中的事物或人們頭腦中的各種概念在計算機程序中的抽

2、象表示,或者說,是現(xiàn)實世界中個體的數(shù)據(jù)抽象模型,是面向?qū)ο蟪绦蛟O(shè)計的基本元素。每個對象都有三個共同的特點:它們都有自己的名字,以區(qū)別其他對象。它們都有自己的狀態(tài),如球有自己的質(zhì)地、顏色和大。它們都有自己的行為,如球可以滾動、停止或旋轉(zhuǎn)。第4頁,共143頁。4第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 類的性質(zhì)抽象性封裝性繼承性多態(tài)性 4.1 類和對象第5頁,共143頁。5第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 如何創(chuàng)建類?使用Class語句。Public | Private | Protected | Friend | Protected Friend _| Sha

3、dows MustInherit | NotInheritableClass 類名Inherits基類名Implements 接口名語句End Class 4.1 類和對象第6頁,共143頁。6第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 例:聲明只含有公有變量的類CustomerPublic Class Customer Public Name As String Public Address As String Public PhoneNumber As StringEnd Class4.1 類和對象第7頁,共143頁。7第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 在

4、哪創(chuàng)建類呢?放在窗體或模塊文件中放在項目內(nèi)的單獨文件中放在單獨的項目中4.1 類和對象第8頁,共143頁。8第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 創(chuàng)建對象也稱為實例化對象。與聲明簡單變量不同,需要添加New關(guān)鍵字才能創(chuàng)建新對象。Dim 對象名 As New 類名Dim 對象名 As 類名=New 類名Dim x As New CustomerDim x As Customer=New Customer4.1 類和對象第9頁,共143頁。9第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 4.2 屬性和方法如何創(chuàng)建屬性?使用Property語句創(chuàng)建屬性。因為屬性可以有返回

5、值,也可以賦值,創(chuàng)建屬性的關(guān)鍵就在于如何實現(xiàn)返回屬性值和給屬性賦值,所以分別使用Get語句和Set語句實現(xiàn)。Default Public | Private | Protected | Friend _| Protected Friend ReadOnly | WriteOnly _Property 屬性名(ByVal 參數(shù)列表) As 類型Get 語句塊End GetSet(ByVal Value As 類型) 語句塊End SetEnd Class 第10頁,共143頁。10第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 屬性舉例Public Class Order Private

6、 mCost As Double Public mQuantity As Integer Public Property Cost() As Double Get Return mCost End Get Set(ByVal Value As Double) mCost = Value End Set End PropertyEnd Class4.2 屬性和方法第11頁,共143頁。11第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 類和對象包含的內(nèi)置過程稱為方法。向Sub類添加過程或函數(shù)就向類添加了一個新方法。如果用Public關(guān)鍵字修飾就是公有的如果用Private關(guān)鍵字修飾就是私

7、有的,只能在類內(nèi)部使用。4.2 屬性和方法第12頁,共143頁。12第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 4.3 封裝、繼承、多態(tài)封裝:就是使其代碼和數(shù)據(jù)變?yōu)閮?nèi)部的,使他們不再供外部對象訪問,除非通過定義良好的接口訪問,也被稱做數(shù)據(jù)隱藏。繼承:指從其它類派生新類的功能。第13頁,共143頁。13第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 繼承的種類:公有繼承:用Public關(guān)鍵字修飾。在其范圍內(nèi)沒有任何限制,它可以被程序的任何一部分使用。受保護繼承:用Protected關(guān)鍵字修飾。當基類成員聲明為受保護時,則再該類及其所有派生類中都可以使用它,但再其它地方則不能。

8、私有繼承:用Private關(guān)鍵字修飾。它只有在當前類中可以使用,在該類之外則不能訪問它,在該類的任何派生類中也不能。換句話,就是停止繼承過程。友元繼承:用Friend關(guān)鍵字修飾。只可以訪問當前程序和同一個程序集中的其它任何地方。4.3 封裝、繼承、多態(tài)第14頁,共143頁。14第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 繼承修飾符:MustInherit:不能直接創(chuàng)建MustInherit類對象,他們只能用作派生類的基類。NotInheritable:不允許類用作基類。4.3 封裝、繼承、多態(tài)第15頁,共143頁。15第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) MyBa

9、se、MyClass與繼承使用MyBase可以訪問基類中原來版本的方法。換句話說,MyBase提供對當前類中已經(jīng)重寫的基類方法的訪問。使用MyClass可以使用其基類中的所有方法,就好像它們是不可重寫的方法一樣。4.3 封裝、繼承、多態(tài)第16頁,共143頁。16第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Class Customer Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public Custom

10、erID As IntegerEnd ClassClass Employee Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public Salary As IntegerEnd ClassClass Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP

11、 As String End Class4.3 封裝、繼承、多態(tài)第17頁,共143頁。17第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Class Customer Inherits Person Public CustomerID As IntegerEnd ClassClass Employee Inherits Person Public Salary As IntegerEnd Class4.3 封裝、繼承、多態(tài)第18頁,共143頁。18第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Object在繼承結(jié)構(gòu)的最端。如果一個類沒有明確繼承自另一個類,就默認為繼承自O(shè)bj

12、ect。4.3 封裝、繼承、多態(tài)第19頁,共143頁。19第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) ObjectPersonCustomerEmployeeProgrammerManager4.3 封裝、繼承、多態(tài)第20頁,共143頁。20第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 抽象類舉例MustInherit Class Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Su

13、b Print() Console.WriteLine(Name) Console.WriteLine(Address) Console.WriteLine(City & , & State & & ZIP) End SubEnd ClassClass Employee Inherits Person Public Salary As IntegerEnd Class第21頁,共143頁。21第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 在抽象類中也可以定義抽象方法。抽象方法需要使用關(guān)鍵字MustOverride 聲明,并且不提供具體實現(xiàn)。如果一個類繼承了含有抽象方法的淚,那么就必須

14、提供該方法的實現(xiàn),或者該方法本身也是抽象方法。4.3 封裝、繼承、多態(tài)第22頁,共143頁。22第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) MustInherit Class Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String MustOverride Sub PrintName() Sub Print() PrintName() Console.WriteLine(Address) Consol

15、e.WriteLine(City & , & State & & ZIP) End SubEnd ClassClass Employee Inherits Person Overrides Sub PrintName() Console.Write(Employee) Console.WriteLine(Name) End Sub Public Salary As IntegerEnd Class第23頁,共143頁。23第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 覆蓋如果派生類中的新方法與基類中方法同名而且參數(shù)列表也相同,則派生類中的新方法將覆蓋(又稱為重寫)基類中同名方法,在這

16、種情況下,當在派生類中或通過派生類的對象直接訪問該方法名時,被訪問的只能是派生類中的同名方法,這稱為同名覆蓋(又叫同名重寫)。4.3 封裝、繼承、多態(tài)第24頁,共143頁。24第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 關(guān)鍵字描述Overridable允許某個類中的屬性或方法在派生類中被覆蓋。Overrides重寫基類中定義為Overridable的屬性或方法。NotOverridable禁止某個屬性或方法在派生類中被覆蓋。默認情況下,Public方法是NotOverridable 。MustOverride要求基類中的屬性或方法在使用前,必須在派生類中被覆蓋。當使用MustOve

17、rride關(guān)鍵字時,方法定義時僅由Sub、Function或Property語句組成,不允許有其他語句,特別是不能有End Sub或End Function語句。此外,必須在MustInherit類中聲明MustOverride方法。第25頁,共143頁。25第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 例:建立一個基類myBaseClass,聲明一個允許覆蓋的方法ShowInfo,再建立該類的一個派生類mySubClass,然后建立mySubClass類的對象,并在該對象中調(diào)用基類和子類中的方法。 4.3 封裝、繼承、多態(tài)第一步:建立一個“Windows應(yīng)用程序”項目。第二步:執(zhí)行

18、“項目/添加類”菜單命令,建立一個名為myBaseClass的基類,在其中定義一個可覆蓋的方法ShowInfo。第26頁,共143頁。26第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 第三步:執(zhí)行“項目/添加類”菜單命令,建立一個名為mySubClass的子類,在其中定義一個與父類完全同名的方法ShowInfo,它覆蓋基類中的同名方法,代碼如下:4.3 封裝、繼承、多態(tài)第27頁,共143頁。27第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 第四步:在窗體上建立兩個按鈕,并分別編寫單擊事件代碼如下:4.3 封裝、繼承、多態(tài)第28頁,共143頁。28第四章 Visual Bas

19、ic.NET 面向?qū)ο蠹夹g(shù) 多態(tài)性:這種功能能夠使相同的代碼操作不同類型的對象。多態(tài)性的兩種方法:基于繼承的多態(tài)性基于接口的多態(tài)性4.3 封裝、繼承、多態(tài)第29頁,共143頁。29第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Module Module1 Sub Main() Dim two As New One() WriteLine(two.add(10) WriteLine(two.add(10, 20) Read() End SubEnd ModulePublic Class One Public i, j, k As Integer Public Function add(

20、ByVal i As Integer) As Integer Return i End Function Public Function add(ByVal i As Integer, ByVal j As Integer) _ As Integer Return i + j End FunctionEnd Class 第30頁,共143頁。30第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 4.4 接口接口:是一套類成員規(guī)范,而不是實現(xiàn),它只是一種規(guī)范。當實現(xiàn)接口時,要編寫每個類成員定義。例,定義一個Person接口,包括SetName和GetName方法,以存儲和返回人員名稱:Pu

21、blic Interface PersonSub SetName(ByVal Name As String)Function GetName() As StringEnd Interface第31頁,共143頁。31第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 當實現(xiàn)接口時需要使用Implement關(guān)鍵字。具體實現(xiàn)如下:Public Class Neighbor Implements Person Dim InternalName As String Sub SetName(ByVal Name As String) Implements Person.SetName Interna

22、lName=Name End Sub Function GetName() As String Implements Person.GetName Return InternalName End FunctionEnd Class4.4 接口第32頁,共143頁。32第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 現(xiàn)在可以創(chuàng)建Neighbor類對象:Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim objNei

23、ghbor As New Neighbor objNeighbor.SetName(“Jill”) TextBox1.Text=“Your neighbor is” & objNeighbor.GetName()End Sub4.4 接口第33頁,共143頁。33第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Creating an Interface named TestPublic Interface Test Specifying two methods in the interface Sub Disp() Function Multiply() As DoubleEnd In

24、terfacePublic Class One Implements Test Public i As Double = 12 Public j As Double = 12.17 Public Sub Disp() Implements Test.Disp Console.WriteLine(sum of i+j = & i + j) End Sub Public Function Multiply() As Double Implements Test.Multiply Console.WriteLine(Multiply of i*j= & i * j) End FunctionEnd

25、ClassModule Moudule1 Sub Main() Dim OneObj As New One OneObj.Disp() OneObj.Multiply() End SubEnd Module第34頁,共143頁。34第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 例:利用接口實現(xiàn)多態(tài)性,調(diào)用計算學(xué)生期末和平時成績的同名方法。4.4 接口第一步:啟動VB.NET,建立一個“Windows應(yīng)用程序”項 目。第二步: 執(zhí)行“項目/添加模塊”菜單命令,建立一個模塊文件Module1.vb。 在模塊代碼窗口中定義一個接口MyInterface ,聲明2個成員,分別為屬性stuNa

26、me、Function過程GetScores ,代碼如下:第35頁,共143頁。35第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 第三步:在模塊Module1中定義實現(xiàn)MyInterface接口的類,代碼如下:4.4 接口第36頁,共143頁。36第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 第四步:在模塊Module1中再定義另一個實現(xiàn)MyInterface接口的類,代碼如下:4.4 接口第37頁,共143頁。37第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 第五步:在窗體代碼中,建立一個通用過程如下:4.4 接口第六步:在窗體上建立一個按鈕,并編寫單擊事件代碼

27、如下:第38頁,共143頁。38第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) End of Chapter第39頁,共143頁。第五章 Visual Basic .NET文件 東北大學(xué)軟件學(xué)院第40頁,共143頁。主要內(nèi)容5.1 Visual .NET文件概述 5.2 System.IO模型5.3 MyComputer.System對象5.4 處理文件系統(tǒng)事件第41頁,共143頁。41第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 5.1 Visual .NET文件概述文件的結(jié)構(gòu) 文件的類型Visual Basic .NET文件訪問方法第42頁,共143頁。42第四章 Vis

28、ual Basic.NET 面向?qū)ο蠹夹g(shù) 文件的結(jié)構(gòu)三種常用的文件結(jié)構(gòu)字節(jié)的序列記錄的序列 樹型結(jié)構(gòu) 數(shù)據(jù)只是簡單的字節(jié)序列,文件系統(tǒng)不負責(zé)解釋其意義 記錄的序列,記錄和記錄間可用空格、回車等分隔符分開 由記錄構(gòu)成的樹,記錄間通過指針相互連接 第43頁,共143頁。43第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 程序文件和數(shù)據(jù)文件 程序文件:存儲計算機程序的源代碼或可執(zhí)行程序, 如.exe, .vb, .c, .h等。數(shù)據(jù)文件:存儲普通的用戶數(shù)據(jù),如實驗報告,成績等普通文件和設(shè)備文件 普通文件:代表存儲在外存上的有數(shù)據(jù)集,可以是數(shù)據(jù)文件也可以是程序文件 設(shè)備文件:代表的是與主機相聯(lián)

29、的各種外部設(shè)備,如顯示器、打印機、鍵盤等 文件的結(jié)構(gòu)第44頁,共143頁。44第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 文件的類型文本文件和二進制文件 文本文件:每一個字節(jié)存放的是一個ASCII碼,代表一個字符 二進制文件:內(nèi)存中的數(shù)據(jù)原樣輸出到文件中 順序文件和隨機文件 順序文件:按順序訪問方式建立的文件,記錄一般是變長記錄 二進制文件:記錄是定長的,只要知道記錄在文件中的順序,就可以知道記錄在文件中的位置 第45頁,共143頁。45第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Visual Basic .NET文件訪問方法 FileSystem模塊提供一些用于直接訪

30、問文件語句和方法 System.IO模型提供了一個面向?qū)ο蟮姆椒ㄔL問文件系統(tǒng) My.Computer.FileSystem對象 用來取代FileSystem模塊,用于提高應(yīng)用程序開發(fā)的生產(chǎn)性和程序執(zhí)行的效率第46頁,共143頁。46第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 5.2 System.IO模型 System.IO模型的文件讀寫基于流的概念流可以抽象地看作一個字節(jié)序列,有起始端和末尾端,并且利用游標指示當前的讀寫位置 第47頁,共143頁。47第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 在VB.NET中,很多數(shù)據(jù)都可以看作流,這些數(shù)據(jù)可以來自內(nèi)存,來自文件或網(wǎng)

31、絡(luò)可以通過Read,Write,Seek等基本操作訪問流所代表的數(shù)據(jù) Read:從游標所在位置起讀取流的數(shù)據(jù)并存放到指定的數(shù)據(jù)結(jié)構(gòu)中 Write:操作將數(shù)據(jù)從游標所在位置起寫入流中Seek:操作將游標移動到流的指定位置 5.2 System.IO模型 第48頁,共143頁。48第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Stream類MustInherit的抽象類用Stream類的不同子類代表不同種類流 流名稱對應(yīng)的類代表的數(shù)據(jù)文件流FileStream代表文件數(shù)據(jù)內(nèi)存緩沖流BufferredStream代表來自于另外一個流的數(shù)據(jù)內(nèi)存流MemoryStream代表內(nèi)存中以無符號字節(jié)

32、形式存儲的數(shù)據(jù)網(wǎng)絡(luò)流NetworkStream代表來自TCP/IP Socket的數(shù)據(jù)加密流CryptoStream代表對其它流的數(shù)據(jù)加密后得到的數(shù)據(jù)Imports System.IO第49頁,共143頁。49第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 常用類名稱主要功能說明File提供Static方法,用于創(chuàng)建文件、打開文件、復(fù)制文件、移動文件和刪除文件,以及創(chuàng)建用于讀寫文件的FileSream對象Directory提供Static方法,用于創(chuàng)建目錄、移動目錄、遍歷子目錄,Directory類不能被繼承FileStreamStream類的子類,支持同步和異步的文件讀寫操作。利用F

33、ile Stream可以對普通文件進行操作,也可對設(shè)備文件進行操作。StreamReader按照指定的編碼方式從一個流中讀取字符數(shù)據(jù)。StreamWriter按照指定的編碼方式將字符數(shù)據(jù)寫入一個流。BinaryReader從指定流中讀取數(shù)據(jù),可以按指定編碼讀取字符數(shù)據(jù),也可以按二進制形式讀取各種基本數(shù)據(jù)類型數(shù)據(jù)或讀取指定長度字節(jié)。BinaryWriter向指定流中寫入數(shù)據(jù),可以按指定編碼寫入字符數(shù)據(jù),也可以按二進制形式寫入各種基本數(shù)據(jù)類型數(shù)據(jù)或?qū)懭胫付ㄩL度的字節(jié)。 其他常用類第50頁,共143頁。50第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 文件的打開與關(guān)閉要打開一個文件,只要根

34、據(jù)該文件的路徑創(chuàng)建一個FileStream類的實例對象即可 Dim 對象名=New FileStream(文件名,打開模式 ,讀寫權(quán)限 )可以包括驅(qū)動器名和路徑的字符串 用來確定如何打開或創(chuàng)建文件, 值為FileMode枚舉類型 可以包括驅(qū)動器名和路徑的字符串, FileAccess枚舉類型 Dim File1 New FileStream (“C:Text.txt”, _ FileMode.OpenOrCreate, FileAccess.ReadWrite )如果不存在,則生成新文件 第51頁,共143頁。51第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 文件的打開與關(guān)閉 Fil

35、eMode枚舉類型成員名稱功能Create創(chuàng)建一個新文件,如果文件已經(jīng)存在,將被新的文件取代。可與FileAccess.Write或FileAccess.ReadWrite同時使用OpenOrCreate如果指定文件已存在,則打開文件,否則創(chuàng)建新文件Open打開已存在的文件,文件不存在時報錯Append打開已存在文件并將游標移動到文件末尾,如果文件不存在,則創(chuàng)建新文件。只能與FileAccess.Write同時使用,寫入的新數(shù)據(jù)將追加到原文件的末尾第52頁,共143頁。52第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 成員名稱功能Read讀文件的訪問方式,表示可以從文件讀出數(shù)據(jù)。可與

36、FileAccess.Write組合,表示讀寫文件的訪問方式。ReadWrite讀寫文件的訪問方式,表示既可以從文件讀出數(shù)據(jù),也可以將數(shù)據(jù)寫入文件。Write寫文件的訪問方式,表示可以將數(shù)據(jù)寫入文件??膳cFileAccess.Read組合,表示讀寫文件的訪問方式 FileAccess枚舉類型文件的打開與關(guān)閉第53頁,共143頁。53第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 可以通過調(diào)用FileStream對象的Close方法關(guān)閉與FileStream對象對應(yīng)的文件 Seek方法和Positon屬性都可用來移動游標位置SeekPosition File1. CloseDim off

37、set As Integer 偏移量Dim origin As SeekOrigin 參照點 Dim returnValue As LongreturnValue=Instance.Seek(origin, offset) value = instance.Position 獲取游標位置instance.Position = value 設(shè)置游標位置文件的打開與關(guān)閉第54頁,共143頁。54第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 名稱說明Begin流的起始端Current游標當前位置End流的末尾端 SeekOrigin枚舉類型屬性名說明ASCII按照ASCII (7bit )

38、字符集編碼BigEndianUnicode按照UTF-16格式編碼,字節(jié)排序方式為Big-EndianDefault按照系統(tǒng)當前ANSI代碼頁編碼Unicode按照UTF-16格式編碼,字節(jié)排序方式為Little-EndianUTF32按照UTF-32格式編碼,字節(jié)排序方式為Little-EndianUTF7按照UTF-7格式編碼UTF8按照UTF-8格式編碼 Encoding的Static屬性第55頁,共143頁。55第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 文本文件的讀寫操作 可以使用StreamReader和StreamWriter類讀寫文本文件Dim 對象名 As New

39、 StreamReader(FileStream對象, 編碼方式 )Dim 對象名 As New StreamWriter(FileStream對象, 編碼方式 )用Encoding類的Static屬性給出可以使用FileStream對象創(chuàng)建,這樣創(chuàng)建的SreamReader和StreamWriter對象用于對FileStream對象代表的文件作讀寫文本數(shù)據(jù)的操作 (1) 創(chuàng)建StreamReader/StreamWriter對象第56頁,共143頁。56第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Dim 對象名 As New StreamReader (文件名, 編碼方式 ) D

40、im 對象名 As New StreamWriter (文件名, True | False, 編碼方式 )可以直接使用文件名創(chuàng)建,這樣創(chuàng)建的SreamReader和StreamWriter對象可以用來以文本方式讀寫與該文件名對應(yīng)文件 Dim File1Reader As New StreamReader ( File1, Encoding.ASCII )Dim File1Writer As New StreamWriter ( File1, Encoding.ASCII )True,寫入文件的數(shù)據(jù)被追加到文本文件的末尾;False,寫入文件的據(jù)覆蓋原來的數(shù)據(jù) 缺省值(1) 創(chuàng)建StreamRe

41、ader/StreamWriter對象文本文件的讀寫操作 第57頁,共143頁。57第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 名稱說明Read讀入下一個字符讀取指定個數(shù)的字符,并存儲到指定的存儲空間中,返回實際讀取的字符個數(shù)ReadLine讀入下一行字符串ReadToEnd從流的當前位置讀到流的末尾Peek返回下一個字符,但并不讀入該字符EndOfStream判斷當前位置是否為文件末尾Close釋放StreamReader對象,并關(guān)閉當前流Dim returnValue As IntegerreturnValue = instance.ReadDim buffer As Char

42、() 存放讀取字符串的存儲空間Dim index As Integer 存儲空間中開始存放的位置 Dim count As Integer 讀取的字符的個數(shù)Dim returnValue As Integer 用于存放返回值 returnValue = instance.Read(buffer, index, count)Dim returnValue As StringreturnValue = instance.ReadLineDim returnValue As StringreturnValue = instance.ReadToEnd(2) 讀取文本文件數(shù)據(jù) Dim returnVa

43、lue As IntegerreturnValue = instance.PeekIf Not instance.EndOfStream Then 如果不是文件末尾. 讀數(shù)據(jù)End If Instance.Close第58頁,共143頁。58第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) ExampleDim onechar As CharIf reader.peek -1 then onechar = Convert.ToChar(reader.Read) TextBox1.Text += onecharEnd if 點擊按鈕“Read a Character”, 讀取一個字符 點擊

44、按鈕“Read a Line”,讀取一行字符 Dim linestr As StringIf reader.peek-1 then linestr = reader.ReadLine TextBox1.Text += linestr & Chr(13) & Chr(10) 追加回車符號End ifDim allstr As Stringallstr = reader.ReadToEndTextBox1.Text += allstr點擊按鈕“Read to End”, 讀取從游標當前位置到文件末尾的所有字符 第59頁,共143頁。59第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) (3)

45、 向文本文件寫入數(shù)據(jù)名稱說明Write有多種重載的形式,用于將各種不同類型的數(shù)據(jù)以文本數(shù)據(jù)的形式寫入文件。包括:基本數(shù)據(jù)類型(Char,boolean, Int32,Int64, Uint32,Uint64,Decimal, Single,Double等),字符串,對象等數(shù)據(jù)Flush將緩存內(nèi)的所有數(shù)據(jù)寫入對應(yīng)文件流中,并清空緩存WriteLine有多種重載的形式,用于將不同類型的數(shù)據(jù)(類似于Write)以文本的形式寫入文件,并在后面加上行結(jié)束符Close釋放SreamWriter對象,關(guān)閉當前流將各種基本數(shù)據(jù)類型數(shù)據(jù)以文本形式寫入文件Dim value As Doubleinstance.W

46、rite(value) Dim buffer As Char( ) 定義一個字符數(shù)組Dim index As IntegerDim count As Integer將字符數(shù)組內(nèi)的所有字符寫入文件instance.Write(buffer) 將字符數(shù)組中從index開始的count個字符寫入文件instance.Write(buffer, index, count)Dim value As Stringinstance.Write(value) 將字符串寫入文件instance.Flushinstance.WriteLine 向文件寫入一個行結(jié)束符其他重載方法與Write類似,區(qū)別是WriteL

47、ine方法多寫入一個行結(jié)束符Dim value As Stringinstance.Write(value) 將String+行結(jié)束符寫入文件instance.Close第60頁,共143頁。60第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Example點擊按鈕”O(jiān)pen File”, 選擇要打開的文件,讀取全部內(nèi)容 OpenFileDialog1.ShowDialog() 選擇要打開的文件名Try file1 = New FileStream(OpenFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite

48、) Catch ex As System.IO.IOException MsgBox(can not open file+OpenFileDialog1.FileName Exit SubEnd TryDim freader As New StreamReader(file1) 創(chuàng)建StreamReader對象 TextBox1.Text += freader.ReadToEnd 讀取文件從游標當前位置到末尾的內(nèi)容第61頁,共143頁。61第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Dim fwriter As New StreamWriter(file1) 創(chuàng)建StreamWri

49、ter對象以文本形式寫入姓名(字符串),并換行fwriter.WriteLine(Name: & TextBox2.Text) 以文本形式寫入年齡(整形),并換行fwriter.WriteLine(age)以文本形式寫入性別(字符串),并換行fwriter.WriteLine(Sex: &ComboBox1.Text) 以文本形式寫入電話(字符串)fwriter.Write (Phone: &TextBox4.Text) 以文本形式寫入電話(字符串)fwriter.WriteLine() 換行以文本形式寫入Email(字符串)fwriter.WriteLine(Email: & TextBox

50、5.Text) fwriter.WriteLine() 換行fwriter.WriteLine() 寫入一個空行,作為與一組輸入的分隔fwriter.Flush() 將緩沖區(qū)內(nèi)的數(shù)據(jù)全部寫入文件RaiseEvent refre() 喚起refre事件點擊按鈕”Write to File”, 選擇要打開的文件,讀取全部內(nèi)容 第62頁,共143頁。62第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 發(fā)生事件”refre”時,從文件中重新讀取全部內(nèi)容,并刷新顯示文件內(nèi)容的文本框file1.Seek(0, SeekOrigin.Begin) 將游標移至文件開始端創(chuàng)建StreamReader對象

51、Dim freader As New StreamReader(file1)TextBox1.Clear()讀取文件從游標當前位置到末尾的全部內(nèi)容TextBox1.Text += freader.ReadToEnd第63頁,共143頁。63第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 二進制文件的讀寫操作可以使用BinaryReader和BinaryWriter類讀寫二進制文件(1) 創(chuàng)建BinaryReader/BinaryWriter對象Dim 對象名 As New BinaryReader (FileStream對象, 編碼方式) Dim 對象名 As New BinaryWr

52、iter (FileStream對象, 編碼方式)Dim File2 New FileStream (“C:binary.txt”, _ FileMode.OpenOrCreate, FileAccess.ReadWrite )Dim File2Reader As New BinaryReader ( File2 )Dim File2Writer As New BinaryWriter ( File2 )第64頁,共143頁。64第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) (2) 讀取二進制文件數(shù)據(jù)名稱說明Read有三個重載的方法,分別是:讀一個字符,讀指定個數(shù)的字符,讀指定個數(shù)的

53、字節(jié)ReadBoolean讀布爾值數(shù)據(jù)ReadByte讀一個字節(jié)ReadChar讀一個字符ReadDecimal讀一個十進制數(shù)據(jù)ReadSigle讀一個單精度浮點數(shù)據(jù)ReadDouble讀一個雙精度浮點數(shù)據(jù)ReadInt16 讀2Byte帶符號整型數(shù)據(jù)ReadUInt16讀2Byte無符號整型數(shù)據(jù)Dim returnValue As IntegerreturnValue = instance.Read 讀一個字符Dim buffer As Byte() 字節(jié)數(shù)組,用于存放讀取的數(shù)據(jù)Dim index As Integer 開始存放的位置(在字節(jié)數(shù)組中)Dim count As Integer

54、指定讀取的字節(jié)數(shù)Dim returnValue As Integer 用于存放實際讀取的字節(jié)數(shù)讀取count個字節(jié),從buffer中index處開始存放returnValue = instance.Read(buffer, index, count)Dim buffer As Char() 用于存放讀取字符的字符數(shù)組Dim index As Integer 開始存放的位置(在字符數(shù)組中)Dim count As Integer 指定讀取的字符數(shù)Dim returnValue As Integer 用于存放實際讀取的字符數(shù)讀取count個字符,從buffer中index處開始存放returnVa

55、lue = instance.Read(buffer, index, count)讀取各種基本數(shù)據(jù)類型Dim bovalue As Booleanbovalue=instance.ReadBooleanDim bvalue As Bytebvalue=instance.ReadByte 第65頁,共143頁。65第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 名稱說明ReadChars讀取指定個數(shù)的字符ReadBytes 讀取指定個數(shù)的字節(jié)ReadString讀取一個字符串PeekChar返回下一個字符,但并不讀入該字符,游標不移動Close釋放StreamReader對象,并關(guān)閉當前

56、流(2) 讀取二進制文件數(shù)據(jù)Dim count As IntegerDim returnValue As Char()returnValue=instance.ReadChars(count) 讀count個字符Dim count As IntegerDim returnValue As Byte()returnValue=instance.ReadBytes(count) 讀count個字節(jié)Dim returnValue As StringreturnValue = instance.ReadString 讀字符串Dim returnValue As IntegerreturnValue =

57、 instance.PeekCharinstance.Close第66頁,共143頁。66第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) 名稱說明Write有多種重載的形式,用于將各種不同類型的數(shù)據(jù)寫入文件。包括:基本數(shù)據(jù)類型(boolean, Byte, Char,Int32,Int64, Uint32,Uint64,Decimal, Single,Double),字節(jié)數(shù)組,字符數(shù)組,字符串等數(shù)據(jù)Flush將緩存內(nèi)的所有數(shù)據(jù)寫入對應(yīng)文件流,清空緩存Seek移動與BinaryWriter對應(yīng)的文件流中游標的位置Close釋放BianryWriter對象,關(guān)閉與其對應(yīng)的文件流(3) 向二

58、進制文件寫入數(shù)據(jù)將各種基本數(shù)據(jù)類型數(shù)據(jù)以二進制形式寫入文件Dim value As DoubleInstance.Write(value) Dim buffer As Byte( ) 定義一個字節(jié)數(shù)組Dim index As IntegerDim count As Integerinstance.Write(buffer) 將字節(jié)數(shù)組內(nèi)的所有字節(jié)寫入文件將字節(jié)數(shù)組中從index開始的count個字節(jié)寫入文件Instance.Write(buffer, index, count) Dim value As StringInstance.Write(value) 將字符串寫入文件Instance.

59、FlushDim offset As Integer 用于指定偏移量Dim origin As SeekOrigin 參照點,SeekOrigin枚舉類型Dim returnValue As Long 接收返回值(游標位置)將游標移動到距參照點origin的偏移量為offset的位置returnValue = instance.Seek(offset, origin)Instance.Close第67頁,共143頁。67第四章 Visual Basic.NET 面向?qū)ο蠹夹g(shù) Example點擊按鈕”Write to File”時, 以二進制形式將記錄寫入文件file1.Seek(0, Seek

60、Origin.End) 將游標移動到文件末尾Dim snum(16) As CharDim sname(20) As CharDim sex(10) As Char將輸入的學(xué)號、姓名、性別信息復(fù)制到對應(yīng)字符數(shù)組TextBox3.Text.CopyTo(0, snum, 0, TextBox3.Text.Length) TextBox4.Text.CopyTo(0, sname, 0, TextBox4.Text.Length)ComboBox1.Text.CopyTo(0, sex, 0, ComboBox1.Text.Length)第68頁,共143頁。68第四章 Visual Basic.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論