把握VB.NET中流(Stream) ( 3)
文件操作具体例子
在这部分你将找到更多常用文件操作代码例子最常用、最基本操作就是把text写入文件和读回来现在应用通常不用 2进制文件作存储简单变量而用它来存储对象对象集合以及其他机器代码下面将看到具体操作例子
读写文本文件
为了把text保存到文件创建个基于FileStreamStreamReader对象然后Write思路方法把需要保存text写入文件下面代码用SaveFileDialog提示用户指定个文件用于保存TextBox1内容
SaveFileDialog1.Filter = _
\"Text Files|*.txt|All Files|*.*\"
SaveFileDialog1.FilterIndex = 0
If SaveFileDialog1.ShowDialog = DialogResult.OK Then
Dim FS As FileStream = SaveFileDialog1.OpenFile
Dim SW As New StreamWriter(FS)
SW.Write(TextBox1.Text)
SW.Close
FS.Close
End If
同样采用类似语句我们读取个文本文件并把内容显示在TextBoxControl控件中StreamReaderReadToEnd思路方法返回文件全部内容
OpenFileDialog1.Filter = _
\"Text Files|*.txt|All Files|*.*\"
OpenFileDialog1.FilterIndex = 0
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
Dim FS As FileStream
FS = OpenFileDialog1.OpenFile
Dim SR As New StreamReader(FS)
TextBox1.Text = SR.ReadToEnd
SR.Close
FS.Close
End If
各种对象存储
采用BinaryFormatte以 2进制形式或者用SoapFormatter类以XML格式都可以序列化个具体对象只要把所有BinaryFormatter引用改为SoapFormatter无需改变任何代码就可以以XML格式序列化对象
首先创建个BinaryFormatter例子:
Dim BinFormatter As New Binary.BinaryFormatter
然后创建个用于存储序列化对象FileStream对象:
Dim FS As New .IO.FileStream(\"c:\\test.txt\", IO.FileMode.Create)
接着BinFormatterSerialize思路方法序列化任何可以序列化framework对象:
R = New Rectangle(rnd.Next(0, 100),rnd.Next(0, 300), _
rnd.Next(10, 40),rnd.Next(1, 9))
BinFormatter.Serialize(FS, R)
加个Serializable属性使得自定义对象可以序列化
<Serializable> Public Structure Person
Dim Name As String
Dim Age As Integer
Dim Income As Decimal
End Structure
下面代码创建个Person对象例子然后BinFormatterSerialize思路方法序列化自定义对象:
P = New Person
P.Name = \"Joe Doe\"
P.Age = 35
P.Income = 28500
BinFormatter.Serialize(FS, P)
你也可以在同个Stream中接着序列化其他对象然后以同样顺序读回例如在序列化Person对象的后接着序列化个Rectangle对象:
BinFormatter.Serialize(FS, New Rectangle(0, 0, 100, 200))
创建个BinaryFormatter对象其Deserialize思路方法然后把返回值转化为正确类型就是整个反序列化过程然后接着发序列化Stream其他对象
假定已经序列化了Person和Rectangle两个对象以同样顺序我们反序列化就可以得到原来对象:
Dim P As New Person
P = BinFormatter.Serialize(FS, Person)
Dim R As New Rectangle
R = BinFormatter.Serialize(FS, Rectangle)
Persisting Collections
集合存储
大多数处理对象集合而不是单个对象对于集合数据首先创建个(或者是其他类型集合比如ArrayList或HashTable)用对象填充然后个Serialize思路方法就可以序列化真个集合是不是很简单?下面例子首先创建个有两个Person对象ArrayList然后序列化本身:
Dim FS As New .IO.FileStream _
(\"c:\\test.txt\", IO.FileMode.Create)
Dim BinFormatter As New Binary.BinaryFormatter
Dim P As New Person
Dim Persons As New ArrayList
P = New Person
P.Name = \"Person 1\"
P.Age = 35
P.Income = 32000
Persons.Add(P)
P = New Person
P.Name = \"Person 2\"
P.Age = 50
P.Income = 72000
Persons.Add(P)
BinFormatter.Serialize(FS, Persons)
以存储序列化数据文件为参数个BinaryFormatter例子Deserialize思路方法就会返回个对象然后把它转化为合适类型下面代码反序列化文件中所有对象然后处理所有Person对象:
FS = New .IO.FileStream _
(\"c:\\test.txt\", IO.FileMode.OpenOrCreate)
Dim obj As Object
Dim P As Person, R As Rectangle
Do
obj = BinFormatter.Deserialize(FS)
If obj.GetType Is GetType(Person) Then
P = CType(obj, Person)
\' Process the P objext
End If
Loop While FS.Position < FS.Length - 1
FS.Close
下面例子Deserialize思路方法反序列化真个集合然后把返回值转换为合适类型(Person):
FS = New .IO.FileStream(\"c:\\test.txt\", IO.FileMode.OpenOrCreate)
Dim obj As Object
Dim Persons As New ArrayList
obj = CType(BinFormatter.Deserialize(FS), ArrayList)
FS.Close
最新评论