You are here:Home » Visual Basic » Input And Output in Visual Basic

Input And Output in Visual Basic

Input & Output

This chapter is dedicated to Input & Output in Visual Basic. The Input & Output in Visual Basic is based on streams.
Streams are objects to work with Input/Output. A stream is an abstraction of a sequence of bytes, such as a file, an input/output device, an inter-process communication pipe, or a TCP/IP socket. In Visual Basic, we have a Stream class, that is an abstract class for all streams. There are additional classes that derive from the Stream class and make the programming a lot easier.

MemoryStream

A MemoryStream is a stream which works with data in a computer memory.
Option Strict On


Imports System.IO

Module Example

Sub Main()

Dim ms As Stream = New MemoryStream(6)

ms.WriteByte(9)
ms.WriteByte(11)
ms.WriteByte(6)
ms.WriteByte(8)
ms.WriteByte(3)
ms.WriteByte(7)

ms.Position = 0

Dim rs As Integer
rs = ms.ReadByte()

Do While rs <> -1
Console.WriteLine(rs)
rs = ms.ReadByte()
Loop

ms.Close()

End Sub

End Module
We write six numbers to a memory with a MemoryStream. Then we read those numbers and print them to the console.
Dim ms As Stream = New MemoryStream(6)
The line creates and initializes a MemoryStream object with a capacity of six bytes.
ms.Position = 0
We set the position of the cursor in the stream to the beginning using the Position property.
ms.WriteByte(9)
ms.WriteByte(11)
ms.WriteByte(6)
...
The WriteByte() method writes a byte to the current stream at the current position.
Do While rs <> -1
Console.WriteLine(rs)
rs = ms.ReadByte()
Loop
Here we read all bytes from the stream and print them to the console.
ms.Close()
Finally, we close the stream.
$ ./memory.exe 
9
11
6
8
3
7
Output of the example.

StreamReader & StreamWriter

StreamReader reads characters from a byte stream. It defaults to UTF-8 encoding. StreamWriter writes characters to a stream in a particular encoding.
Option Strict On

Imports System.IO

Module Example

Sub Main()

Dim file As String
file = "languages"

Try
Dim stream As StreamReader
stream = New StreamReader(file)
Console.WriteLine(stream.ReadToEnd())
Catch e As IOException
Console.WriteLine("Cannot read file.")
End Try

End Sub

End Module
We have a file called languages. We read characters from that file and print them to the console.
Dim stream As StreamReader
stream = New StreamReader(file)
The StreamReader takes a file name as a parameter.
Console.WriteLine(stream.ReadToEnd())
The ReadToEnd() method reads all characters to the end of the stream.
$ cat languages 
Python
Visual Basic
PERL
Java
C
C#
$ ./readfile.exe
Python
Visual Basic
PERL
Java
C
C#
We have a languages file in the current directory. We print all lines of the file to the console.

In the next example, we will be counting lines.
Option Strict On

Imports System.IO

Module Example

Sub Main()

Dim file As String
Dim count As Integer

file = "languages"

Try
Dim stream As StreamReader
stream = New StreamReader(file)

While Not (stream.ReadLine() Is Nothing)
count += 1
End While

Catch e As IOException
Console.WriteLine("Cannot read file.")
End Try

Console.WriteLine("There are {0} lines", count)

End Sub

End Module
Counting lines in a file.
While Not (stream.ReadLine() Is Nothing)
count += 1
End While
In the While loop, we read a line from the stream with the ReadLine() method. It returns a line from the stream or Nothing if the end of the input stream is reached.

An example with StreamWriter follows.
Option Strict On

Imports System.IO

Module Example

Sub Main()

Dim mstream As New MemoryStream()
Dim swriter As New StreamWriter(mstream)

swriter.Write("ZetCode, tutorials for programmers.")
swriter.Flush()

Dim sreader As New StreamReader(mstream)
Console.WriteLine(sreader.ReadToEnd())
sreader.Close()

End Sub

End Module
In the preceding example, we write characters to the memory.
Dim mstream As New MemoryStream()
A MemoryStream is created.
Dim swriter As New StreamWriter(mstream)
A StreamWriter class takes a memory stream as a parameter. This way, we are going to write to memory stream.
swriter.Write("ZetCode, tutorials for programmers.")
swriter.Flush()
We write some text to the writer. The Flush()clears all buffers for the current writer and causes any buffered data to be written to the underlying stream.
Dim sreader As New StreamReader(mstream)
Console.WriteLine(sreader.ReadToEnd())
Now we create an instance of the stream reader and read everything we have written back.

FileStream

A FileStream class uses a stream on a file on the filesystem. This class can be used to read from files, write to files, open them and close them.
Option Strict On

Imports System.IO
Imports System.Text

Module Example

Sub Main()
Dim fstream As New FileStream("author", FileMode.Append)
Dim bytes As Byte() = New UTF8Encoding().GetBytes("Фёдор Михайлович Достоевский")

fstream.Write(bytes, 0, bytes.Length)
fstream.Close()
End Sub

End Module
We write some text in Russian azbuka to the file in the current working directory.
Dim fstream As New FileStream("author", FileMode.Append)
A FileStream object is created. The second parameter is a mode, in which the file is opened. The append mode opens the file if it exists and seeks to the end of the file, or creates a new file.
Dim bytes As Byte() = New UTF8Encoding().GetBytes("Фёдор Михайлович Достоевский")
We create an array of bytes from text in russian azbuka.
fstream.Write(bytes, 0, bytes.Length)
We write the bytes to the file stream.

XmlTextReader

We can use streams to read xml data. The XmlTextReader is the class to read xml files in Visual Basic. The class is forward-only and read-only.
We have the following xml test file.
<?xml version="1.0" encoding="utf-8" ?>
<languages>
<language>Python</language>
<language>Ruby</language>
<language>Javascript</language>
<language>C#</language>
</languages>
Option Strict On

Imports System.IO
Imports System.Xml

Module Example

Sub Main()

Dim file As String
file = "languages.xml"

Try
Dim xreader As New XmlTextReader(file)

xreader.MoveToContent()

Do While xreader.Read()
Select Case xreader.NodeType
Case XmlNodeType.Element
Console.Write(xreader.Name & ": ")
Case XmlNodeType.Text
Console.WriteLine(xreader.Value)
End Select
Loop

xreader.Close()

Catch e As IOException
Console.WriteLine("Cannot read file.")
Catch e As XmlException
Console.WriteLine("XML parse error")
End Try

End Sub

End Module
This Visual Basic program reads data from the previously specified xml file and prints it to the terminal.
Dim xreader As New XmlTextReader(file)
An XmlTextReader object is created. It takes the file name as a parameter.
xreader.MoveToContent()
The MoveToContent() method moves to the actual content of the xml file.
Do While xreader.Read()
This line reads the next node from the stream.
Case XmlNodeType.Element
Console.Write(xreader.Name & ": ")
Case XmlNodeType.Text
Console.WriteLine(xreader.Value)
Here we print the element name and element text.
Catch e As XmlException
Console.WriteLine("XML parse error")
We check for xml parse error.
$ ./readxml.exe 
language: Python
language: Ruby
language: Javascript
language: C#
Output of example.

Files and directories

The .NET framework provides other classes that we can use to work with files and directories.
A File class is a higher level class that has shared methods for file creation, deletion, copying, moving and opening. These methods make the job easier.
Option Strict On

Imports System.IO

Module Example

Sub Main()
Try
Dim sw As StreamWriter

sw = File.CreateText("cars")

sw.WriteLine("Toyota")
sw.WriteLine("Skoda")
sw.WriteLine("BMW")
sw.WriteLine("Volkswagen")
sw.WriteLine("Volvo")

sw.Close()
Catch e As IOException
Console.WriteLine("IO error")
End Try

End Sub

End Module
In the example, we create a cars file and write some car names into it.
sw = File.CreateText("cars")
The CreateText() method creates or opens a file for writing UTF-8 encoded text. It returns a StreamWriter object.
sw.WriteLine("Toyota")
sw.WriteLine("Skoda")
...
We write two lines to the stream.

Option Strict On

Imports System.IO

Module Example

Sub Main()

If File.Exists("cars")
Console.WriteLine(File.GetCreationTime("cars"))
Console.WriteLine(File.GetLastWriteTime("cars"))
Console.WriteLine(File.GetLastAccessTime("cars"))
End If

File.Copy("cars", "newcars")

End Sub

End Module
In the second example, we show other five shared methods of the File class.
If File.Exists("cars")
The Exists() method determines whether the specified file exists.
Console.WriteLine(File.GetCreationTime("cars"))
Console.WriteLine(File.GetLastWriteTime("cars"))
Console.WriteLine(File.GetLastAccessTime("cars"))
We get creation time, last write time and last access time of the specified file.
File.Copy("cars", "newcars")
The Copy() method copies the file.

The My.Computer.FileSystem is and object, which provides properties and methods for working with drives, files, and directories.
Option Strict On

Imports System.IO

Module Example

Sub Main()

Try
My.Computer.FileSystem.CreateDirectory("temp")
My.Computer.FileSystem.CreateDirectory("newdir")
My.Computer.FileSystem.MoveDirectory("temp", "temporary")
Catch e As IOException
Console.WriteLine("Cannot create directories")
Console.WriteLine(e.Message)
End Try

End Sub

End Module
We will use two methods from the above mentioned object.
My.Computer.FileSystem.CreateDirectory("temp")
The CreateDirectory() method creates a new directory.
My.Computer.FileSystem.MoveDirectory("temp", "temporary")
The MoveDirectory() method gives a specified directory a new name.

The DirectoryInfo and Directoryhave methods for creating, moving, and enumerating through directories and subdirectories.
Option Strict On

Imports System.IO

Module Example

Dim subDir As IO.DirectoryInfo
Dim dir As New IO.DirectoryInfo("../io")

Dim fileName As String

Dim files As String() = Directory.GetFiles("../io")
Dim dirs As DirectoryInfo() = dir.GetDirectories()

Sub Main()

For Each subDir In dirs
Console.WriteLine(subDir.Name)
Next

For Each fileName In files
Console.WriteLine(fileName)
Next

End Sub

End Module
We use the DirectoryInfo class to traverse a specific directory and print its contents.
Dim dir As New IO.DirectoryInfo("../io")
We will show the contents of this directory (io).
Dim files As String() = Directory.GetFiles("../io")
We get all files of the io directory using the shared GetFiles() method.
Dim dirs As DirectoryInfo() = dir.GetDirectories()
We get all directories.
For Each subDir In dirs
Console.WriteLine(subDir.Name)
Next
Here we loop through directories and print their names to the console.
For Each fileName In files
Console.WriteLine(fileName)
Next
Here we loop through the array of files and print their names to the console.
$ ./showcontents.exe 
newdir
temp
temporary
../io/append.exe
../io/append.vb
../io/append.vb~
../io/author
../io/cars
...
Output of the example.
In this chapter, we have covered Input/Output operations in Visual Basic.

0 comments:

Post a Comment