Метод os.File.Read

Метод os.File.Read читает данные из файла в байтовый слайс. В первый параметр он принимает байтовый слайс, в который будут записаны прочитанные данные. Метод возвращает количество фактически прочитанных байт и ошибку. Чтение происходит до заполнения слайса или до достижения конца файла.

Синтаксис

gofunc (f *File) Read(b []byte) (n int, err error)

Пример

Давайте прочитаем содержимое файла в байтовый слайс размером 100 байт:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("example.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  buffer := make([]byte, 100)
  n, err := file.Read(buffer)
  if err != nil {
    fmt.Println("Error reading file:", err)
    return
  }

  fmt.Printf("Read %d bytes: %s\n", n, string(buffer[:n]))
}

Результат выполнения кода:

go"Read 27 bytes: Hello, this is test file."

Пример

Давайте прочитаем файл по частям в цикле, пока не достигнем его конца:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("example.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  buffer := make([]byte, 16)
  totalBytes := 0

  for {
    n, err := file.Read(buffer)
    if n > 0 {
      totalBytes += n
      fmt.Printf("%s", string(buffer[:n]))
    }
    if err != nil {
      break
    }
  }

  fmt.Printf("\nTotal bytes read: %d\n", totalBytes)
}

Результат выполнения кода:

go"Hello, this is test file."
"Total bytes read: 27"

Пример

Давайте обработаем ошибку конца файла, используя константу io.EOF:

gopackage main

import (
  "fmt"
  "io"
  "os"
)

func main() {
  file, err := os.Open("example.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  buffer := make([]byte, 32)

  for {
    n, err := file.Read(buffer)
    if err != nil {
      if err == io.EOF {
        fmt.Println("End of file reached")
        break
      }
      fmt.Println("Error reading file:", err)
      return
    }
    fmt.Printf("Read %d bytes: %s\n", n, string(buffer[:n]))
  }
}

Результат выполнения кода:

go"Read 27 bytes: Hello, this is test file."
"End of file reached"

Смотрите также

  • функцию os.Open,
    которая открывает файл для чтения
  • функцию os.ReadFile,
    которая читает файл целиком
  • метод os.File.Write,
    который записывает данные в файл
  • метод os.File.Close,
    который закрывает открытый файл