VB.Net中的高级文件操作
前面的示例在VB.Net中提供了简单的文件操作。但是,要利用 System.IO类 的强大功能,您需要了解这些类的常用属性和方法。
读取和写入文本文件 - 它涉及读取和写入文本文件。StreamReader的和StreamWriter类帮助来完成它。
StreamReader的和StreamWriter类用于读取和写入数据的文本文件。这些类继承自抽象基类Stream,后者支持在文件流中读取和写入字节。
StreamReader类
StreamReader类还从抽象基类的TextReader表示用于读字符系列的读取器继承。下表描述了StreamReader类的一些常用方法-
方法 |
功能 |
Public Overrides Sub Close |
它关闭StreamReader对象和基础流,并释放与阅读器关联的所有系统资源。 |
Public Overrides Function Peek As Integer |
返回下一个可用字符,但不使用它。 |
Public Overrides Function Read As Integer |
从输入流中读取下一个字符,并将字符位置前进一个字符。 |
例子
下面的示例演示如何读取一个名为Jamaica.txt的文本文件。该文件读取-
阳光
在天上一闪
又被乌云埋掩
暴雨冲洗着
我灵魂的底片
Imports System.IO
Module fileProg
Sub Main()
Try
' Create an instance of StreamReader to read from a file.
' The using statement also closes the StreamReader.
Using sr As StreamReader = New StreamReader("e:/jamaica.txt")
Dim line As String
' Read and display lines from the file until the end of
' the file is reached.
line = sr.ReadLine()
While (line <> Nothing)
Console.WriteLine(line)
line = sr.ReadLine()
End While
End Using
Catch e As Exception
' Let the user know what went wrong.
Console.WriteLine("The file could not be read:")
Console.WriteLine(e.Message)
End Try
Console.ReadKey()
End Sub
End Module
猜猜在编译和运行程序时显示什么!
StreamWriter类
StreamWriter类继承了抽象类TextWriter,可以写一系列字符。
下表显示了此类中一些最常用的方法-
方法 |
功能 |
Public Overrides Sub Close |
关闭当前的StreamWriter对象和基础流。 |
Public Overrides Sub Flush |
清除当前写入器的所有缓冲区,并使所有缓冲的数据写入基础流。 |
Public Overridable Sub Write (value As Boolean) |
将布尔值的文本表示形式写入文本字符串或流。 (继承自TextWriter。) |
Public Overrides Sub Write (value As Char) |
将字符写入流。 |
Public Overridable Sub Write (value As Decimal) |
将十进制值的文本表示形式写入文本字符串或流。 |
Public Overridable Sub Write (value As Double) |
将8字节浮点值的文本表示形式写入文本字符串或流。 |
Public Overridable Sub Write (value As Integer) |
将4字节有符号整数的文本表示形式写入文本字符串或流。 |
Public Overrides Sub Write (value As String) |
将字符串写入流。 |
Public Overridable Sub WriteLine |
将行终止符写入文本字符串或流。 |
以下示例演示使用StreamWriter类将文本数据写入文件中-
Imports System.IO
Module fileProg
Sub Main()
Dim names As String() = New String() {"Zara Alex", _
"Nuha Alex", "Amir Sohel", "M Amlan"}
Dim s As String
Using sw As StreamWriter = New StreamWriter("names.txt")
For Each s In names
sw.WriteLine(s)
Next s
End Using
' Read and show each line from the file.
Dim line As String
Using sr As StreamReader = New StreamReader("names.txt")
line = sr.ReadLine()
While (line <> Nothing)
Console.WriteLine(line)
line = sr.ReadLine()
End While
End Using
Console.ReadKey()
End Sub
End Module
编译并执行上述代码后,将产生以下结果-
Zara Alex
Nuha Alex
Amir Sohel
M Amlan
读取和写入二进制文件 - 它涉及读取和写入二进制文件。 BinaryReader在和的BinaryWriter类帮助实现这一目标。
BinaryReader 类
BinaryReader 在类用于从文件中读取二进制数据。BinaryReader在对象通过使创造的FileStream对象给它的构造。
下表显示了 BinaryReader 类的一些常用方法。
方法 |
功能 |
Public Overridable Sub Close |
它关闭BinaryReader对象和基础流。 |
Public Overridable Function Read As Integer |
从基础流中读取字符并前进流的当前位置。 |
Public Overridable Function ReadBoolean As Boolean |
从当前流中读取布尔值,并将流的当前位置前移一个字节。 |
Public Overridable Function ReadByte As Byte |
从当前流中读取下一个字节,并将流的当前位置前移一个字节。 |
Public Overridable Function ReadBytes (count As Integer) As Byte() |
从当前流中将指定数量的字节读取到字节数组中,并将当前位置前移该字节数量。 |
Public Overridable Function ReadChar As Char |
从当前流中读取下一个字符,并根据使用的编码和从流中读取的特定字符来推进流的当前位置。 |
Public Overridable Function ReadChars (count As Integer) As Char() |
从当前流中读取指定数量的字符,返回字符数组中的数据,并根据所使用的编码和从流中读取的特定字符前进当前位置。 |
Public Overridable Function ReadDouble As Double |
从当前流中读取一个8字节的浮点值,并将该流的当前位置前移8个字节。 |
Public Overridable Function ReadInt32 As Integer |
从当前流中读取一个4字节有符号整数,并将该流的当前位置前移四个字节。 |
Public Overridable Function ReadString As String |
从当前流中读取一个字符串。该字符串以长度为前缀,一次编码为7位整数。 |
BinaryWriter 类
BinaryWriter 类用于二进制数据写入流。通过将 FileStream 对象传递给其构造函数来创建BinaryWriter对象。
下表显示了BinaryWriter类的一些常用方法。
方法 |
功能 |
Public Overridable Sub Close |
它关闭BinaryWriter对象和基础流。 |
Public Overridable Sub Flush |
清除当前写入器的所有缓冲区,并使所有缓冲的数据写入底层设备。 |
Public Overridable Function Seek (offset As Integer, origin As SeekOrigin ) As Long |
设置当前流中的位置。 |
Public Overridable Sub Write (value As Boolean) |
将一字节的布尔值写入当前流,其中0表示false,1表示true。 |
Public Overridable Sub Write (value As Byte) |
将无符号字节写入当前流,并将流位置前进一个字节。 |
Public Overridable Sub Write (buffer As Byte()) |
将字节数组写入基础流。 |
Public Overridable Sub Write (ch As Char ) |
根据使用的编码和写入到流中的特定字符,将Unicode字符写入当前流,并提高流的当前位置。 |
Public Overridable Sub Write (chars As Char()) |
根据使用的编码和写入到流中的特定字符,将字符数组写入当前流,并前进流的当前位置。 |
Public Overridable Sub Write (value As Double ) |
将一个八字节的浮点值写入当前流,并将流位置前进八个字节。 |
Public Overridable Sub Write (value As Integer ) |
将四个字节的有符号整数写入当前流,并将流位置前移四个字节。 |
Public Overridable Sub Write (value As String ) |
以BinaryWriter的当前编码方式向该流中写入一个带前缀的字符串,并根据所使用的编码和要写入该流中的特定字符来提高流的当前位置。 |
例 - 以下示例演示了读写二进制数据-
Imports System.IO
Module fileProg
Sub Main()
Dim bw As BinaryWriter
Dim br As BinaryReader
Dim i As Integer = 25
Dim d As Double = 3.14157
Dim b As Boolean = True
Dim s As String = "I am happy"
'create the file
Try
bw = New BinaryWriter(New FileStream("mydata", FileMode.Create))
Catch e As IOException
Console.WriteLine(e.Message + "\n Cannot create file.")
Return
End Try
'writing into the file
Try
bw.Write(i)
bw.Write(d)
bw.Write(b)
bw.Write(s)
Catch e As IOException
Console.WriteLine(e.Message + "\n Cannot write to file.")
Return
End Try
bw.Close()
'reading from the file
Try
br = New BinaryReader(New FileStream("mydata", FileMode.Open))
Catch e As IOException
Console.WriteLine(e.Message + "\n Cannot open file.")
Return
End Try
Try
i = br.ReadInt32()
Console.WriteLine("Integer data: {0}", i)
d = br.ReadDouble()
Console.WriteLine("Double data: {0}", d)
b = br.ReadBoolean()
Console.WriteLine("Boolean data: {0}", b)
s = br.ReadString()
Console.WriteLine("String data: {0}", s)
Catch e As IOException
Console.WriteLine(e.Message + "\n Cannot read from file.")
Return
End Try
br.Close()
Console.ReadKey()
End Sub
End Module
编译并执行上述代码后,将产生以下结果-
Integer data: 25
Double data: 3.14157
Boolean data: True
String data: I am happy
操纵Windows文件系统 -它使VB.Net程序员能够浏览和定位Windows文件和目录。
VB.Net允许您使用各种与目录和文件相关的类(如DirectoryInfo类和FileInfo类)来处理目录和文件。
DirectoryInfo 类
DirectoryInfo的类是从派生FileSystemInfo类。它具有用于创建,移动和浏览目录和子目录的各种方法。这个类不能被继承。
以下是一些常用的DirectoryInfo类的属性-
属性 |
说明 |
Attributes |
获取当前文件或目录的属性。 |
CreationTime |
获取当前文件或目录的创建时间。 |
Exists |
获取一个布尔值,该布尔值指示目录是否存在。 |
Extension |
获取表示文件扩展名的字符串。 |
FullName |
获取目录或文件的完整路径。 |
LastAccessTime |
获取上次访问当前文件或目录的时间。 |
Name |
获取此DirectoryInfo实例的名称。 |
以下是一些DirectoryInfo类的常用方法-
方法 |
说明 |
Public Sub Create |
创建目录。 |
Public Function CreateSubdirectory (path As String ) As DirectoryInfo |
在指定的路径上创建一个或多个子目录。 指定的路径可以相对于DirectoryInfo类的此实例。 |
Public Overrides Sub Delete |
如果此DirectoryInfo为空,则删除它。 |
Public Function GetDirectories As DirectoryInfo() |
返回当前目录的子目录。 |
Public Function GetFiles As FileInfo() |
从当前目录返回文件列表。 |
FileInfo 类
FileInfo类是从派生FileSystemInfo类。它具有用于创建,复制,删除,移动和打开文件的属性和实例方法,并有助于创建FileStream对象。这个类不能被继承。
属性 |
说明 |
Attributes |
获取当前文件的属性。 |
CreationTime |
获取当前文件的创建时间。 |
Directory |
获取文件所属目录的实例。 |
Exists |
获取一个布尔值,该值指示文件是否存在。 |
Extension |
获取表示文件扩展名的字符串。 |
FullName |
获取文件的完整路径。 |
LastAccessTime |
获取当前文件的最后访问时间。 |
LastWriteTime |
获取文件上一次写入活动的时间。 |
Length |
获取当前文件的大小(以字节为单位)。 |
Name |
获取文件名。 |
以下是一些常用方法的的的FileInfo类-
方法 |
说明 |
Public Function AppendText As StreamWriter |
创建一个StreamWriter,将文本追加到FileInfo的此实例表示的文件中。 |
Public Function Create As FileStream |
创建一个文件。 |
Public Overrides Sub Delete |
永久删除文件。 |
Public Sub MoveTo (destFileName As String ) |
将指定的文件移动到新位置,并提供指定新文件名的选项。 |
Public Function Open (mode As FileMode) As FileStream |
以指定模式打开文件。 |
Public Function Open (mode As FileMode, access As FileAccess ) As FileStream |
以指定的方式打开具有读取,写入或读取/写入访问权限的文件。 |
Public Function Open (mode As FileMode, access As FileAccess, share As FileShare ) As FileStream |
以具有读,写或读/写访问权限以及指定的共享选项的指定模式打开文件。 |
Public Function OpenRead As FileStream |
创建一个只读FileStream |
Public Function OpenWrite As FileStream |
创建一个只写FileStream。 |
以下示例演示了上述类的用法-
Imports System.IO
Module fileProg
Sub Main()
'creating a DirectoryInfo object
Dim mydir As DirectoryInfo = New DirectoryInfo("c:\Windows")
' getting the files in the directory, their names and size
Dim f As FileInfo() = mydir.GetFiles()
Dim file As FileInfo
For Each file In f
Console.WriteLine("File Name: {0} Size: {1} ", file.Name, file.Length)
Next file
Console.ReadKey()
End Sub
End Module
编译并运行程序时,它将在Windows目录中显示文件名及其大小。