Непосредственно для работы с текстовыми файлами в пространстве System.IO предназначены специальные классы StreamReader и StreamWriter.
Класс StreamReader позволяет читать из текстового файла весь текст или отдельные строки. Рассмотрим основные его методы:
Метод Close закрывает файл и освобождает поток
Метод Peek возвращает следующий доступный символ, если символов больше нет, то возвращает -1
Метод Read считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию:
Read(array As Char(), index As Integer, count As Integer)
, где array
- массив, куда считываются символы, index
- индекс в массиве array,
начиная с которого записываются считываемые символы, и count - максимальное количество считываемых символов
Метод ReadLine считывает одну строку из файла
Метод ReadToEnd считывает из файла весь текст
Считаем текст из файла различными способами:
Imports System.IO Module Module1 Sub Main() Dim path As String = "C:\SomeDir\note.txt" Try Console.WriteLine("******считываем весь файл********") Using reader As New StreamReader(path) Console.WriteLine(reader.ReadToEnd()) End Using Console.WriteLine() Console.WriteLine("******считываем построчно********") Using reader As New StreamReader(path, System.Text.Encoding.UTF8) Dim line As String = reader.ReadLine() While (line IsNot Nothing) Console.WriteLine(line) line = reader.ReadLine() End While End Using Console.WriteLine() Console.WriteLine("******считываем блоками********") Using reader As New StreamReader(path, System.Text.Encoding.UTF8) Dim archars As Char() = New Char(4) {} 'считываем 4 символа reader.Read(archars, 0, 4) Console.WriteLine(archars) End Using Catch ex As Exception Console.WriteLine(ex.Message) End Try Console.ReadLine() End Sub End Module
Как и в случае с классом FileStream здесь используется конструкция Using
.
В первом случае мы разом считываем весь текст с помощью метода ReadToEnd()
.
Во втором случае в цикле While считываем построчно. Когда объект reader дойдет до конца файла и больше строк не останется, то
метод reade.ReadLine()
вернет значение Nothing.
В третьем случае считываем в массив четыре символа.
Обратите внимание, что в последних двух случаях в конструкторе StreamReader указывалась кодировка System.Text.Encoding.UTF8
.
Если нам известна кодировка файла, то мы можем ее указать при чтении файла. Также через другие свойства мы можем указать другие кодировки.
Если кодировка не указана, то по умолчанию при чтении используется UTF8
. Иногда важно указывать кодировку, так как она может
отличаться от UTF8, и тогда мы получим некорректный вывод.
Для записи в текстовый файл применяется класс StreamWriter
. Его основные методы:
Close: закрывает записываемый файл и освобождает все ресурсы
Flush: записывает в файл оставшиеся в буфере данные и очищает буфер.
Write: записывает в файл данные простейших типов, как Integer, Double и т.д.
WriteLine: записывает в файл строку
Посмотрим на использование класса StreamWriter на примере:
Imports System.IO Module Module1 Sub Main() Dim readPath As String = "C:\SomeDir\note.txt" Dim writePath As String = "C:\SomeDir\note2.txt" Dim text As String Try Using reader As New StreamReader(readPath) text = reader.ReadToEnd() End Using Using writer As New StreamWriter(writePath, False, System.Text.Encoding.UTF8) writer.WriteLine(text) End Using Using writer As New StreamWriter(writePath, True, System.Text.Encoding.UTF8) writer.WriteLine("Дозапись") writer.Write(4.5) End Using Catch ex As Exception Console.WriteLine(ex.Message) End Try Console.ReadLine() End Sub End Module
Вначале весь текст из файла считывается в переменную text, а затем содержание этой переменной с помощью объекта StreamWriter записывается в другой файл.
Класс StreamWriter имеет несколько конструкторов. Здесь мы использовали два из них: New StreamWriter(writePath, False)
.
В качестве первого параметра передается путь к записываемому файлу. Второй параметр представляет булевую переменную, которая определяет,
будет файл дозаписываться или перезаписываться. Если этот параметр равен True
, то новые данные добавляются в конце к уже имеющимся
данным. Если False
, то предыдущее содержимое стирается, и файл перезаписывается. И если в первом случае файл перезаписывается, то во втором делается дозапись в конец файла.
Третий параметр указывает кодировку, в которой записывается файл.