package main import ( "bufio" "fmt" "os" ) func main() { // readFile() // writeFile() // scanFile() readWrite() } // Чтение файла построчно с bufio.Reader func readFile() { file, err := os.Open("data.txt") if err != nil { fmt.Printf("Ошибка открытия файла: %v\n", err) return } defer func() { if err := file.Close(); err != nil { fmt.Printf("Ошибка закрытия файла %v\n", err) } else { fmt.Println("Файл закрыт") } }() reader := bufio.NewReader(file) for { line, err := reader.ReadString('\n') if err != nil { if err.Error() != "EOF" { fmt.Printf("Ошибка чтения файла: %v\n") } break } processLine(line) } } // Функция обработки строк func processLine(line string) { fmt.Print(line) // здесь можно добавить любую обработку строки } // Буферизированная запись в файл с bufio.Writer func writeFile() { file, err := os.Create("output.txt") if err != nil { fmt.Printf("Ошибка создания файла %v\n", err) return } defer func() { if err := file.Close(); err != nil { fmt.Printf("Ошибка закрытия файла: %v\n", err) } }() writer := bufio.NewWriter(file) for i := 1; i < 100; i++ { _, err := writer.WriteString(fmt.Sprintf("Строка номер %d\n", i)) if err != nil { fmt.Printf("Ошибка записи: %v\n", err) return } } if err := writer.Flush(); err != nil { fmt.Printf("Ошибка сброса буфера: %v\n", err) } } // bufio.Scanner для простого чтения func scanFile() { file, err := os.Open("data.txt") if err != nil { fmt.Printf("Ошибка открытия файла: %v\n", err) return } defer file.Close() scanner := bufio.NewScanner(file) lineNumber := 1 for scanner.Scan() { fmt.Printf("Строка %d: %s\n", lineNumber, scanner.Text()) lineNumber++ } if err := scanner.Err(); err != nil { fmt.Printf("Ошибка сканирования: %v\n", err) } } // Комбинированное чтение и запись с bufio.ReadWriter func readWrite() { file, err := os.OpenFile("readwriter.txt", os.O_RDWR|os.O_CREATE, 0644) if err != nil { fmt.Printf("Ошибка открытия файла: %v\n", err) return } defer func() { if err := file.Close(); err != nil { fmt.Printf("Ошибка закрытия файла: %v\n", err) } }() rw := bufio.NewReadWriter(bufio.NewReader(file), bufio.NewWriter(file)) // Чтение первой строки line, err := rw.ReadString('\n') if err != nil { fmt.Printf("Ошибка чтения: %v\n", err) return } fmt.Printf("Прочитано %s", line) // Переход в конец файла для записи _, err = rw.WriteString("Добавленная строка\n") if err != nil { fmt.Printf("Ошибка записи: %v\n", err) return } // Сброс буфера if err := rw.Flush(); err != nil { fmt.Printf("Ошибка сброса буфера: %v\n", err) } }