bufio_example.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. )
  7. func main() {
  8. // readFile()
  9. // writeFile()
  10. // scanFile()
  11. readWrite()
  12. }
  13. // Чтение файла построчно с bufio.Reader
  14. func readFile() {
  15. file, err := os.Open("data.txt")
  16. if err != nil {
  17. fmt.Printf("Ошибка открытия файла: %v\n", err)
  18. return
  19. }
  20. defer func() {
  21. if err := file.Close(); err != nil {
  22. fmt.Printf("Ошибка закрытия файла %v\n", err)
  23. } else {
  24. fmt.Println("Файл закрыт")
  25. }
  26. }()
  27. reader := bufio.NewReader(file)
  28. for {
  29. line, err := reader.ReadString('\n')
  30. if err != nil {
  31. if err.Error() != "EOF" {
  32. fmt.Printf("Ошибка чтения файла: %v\n")
  33. }
  34. break
  35. }
  36. processLine(line)
  37. }
  38. }
  39. // Функция обработки строк
  40. func processLine(line string) {
  41. fmt.Print(line) // здесь можно добавить любую обработку строки
  42. }
  43. // Буферизированная запись в файл с bufio.Writer
  44. func writeFile() {
  45. file, err := os.Create("output.txt")
  46. if err != nil {
  47. fmt.Printf("Ошибка создания файла %v\n", err)
  48. return
  49. }
  50. defer func() {
  51. if err := file.Close(); err != nil {
  52. fmt.Printf("Ошибка закрытия файла: %v\n", err)
  53. }
  54. }()
  55. writer := bufio.NewWriter(file)
  56. for i := 1; i < 100; i++ {
  57. _, err := writer.WriteString(fmt.Sprintf("Строка номер %d\n", i))
  58. if err != nil {
  59. fmt.Printf("Ошибка записи: %v\n", err)
  60. return
  61. }
  62. }
  63. if err := writer.Flush(); err != nil {
  64. fmt.Printf("Ошибка сброса буфера: %v\n", err)
  65. }
  66. }
  67. // bufio.Scanner для простого чтения
  68. func scanFile() {
  69. file, err := os.Open("data.txt")
  70. if err != nil {
  71. fmt.Printf("Ошибка открытия файла: %v\n", err)
  72. return
  73. }
  74. defer file.Close()
  75. scanner := bufio.NewScanner(file)
  76. lineNumber := 1
  77. for scanner.Scan() {
  78. fmt.Printf("Строка %d: %s\n", lineNumber, scanner.Text())
  79. lineNumber++
  80. }
  81. if err := scanner.Err(); err != nil {
  82. fmt.Printf("Ошибка сканирования: %v\n", err)
  83. }
  84. }
  85. // Комбинированное чтение и запись с bufio.ReadWriter
  86. func readWrite() {
  87. file, err := os.OpenFile("readwriter.txt", os.O_RDWR|os.O_CREATE, 0644)
  88. if err != nil {
  89. fmt.Printf("Ошибка открытия файла: %v\n", err)
  90. return
  91. }
  92. defer func() {
  93. if err := file.Close(); err != nil {
  94. fmt.Printf("Ошибка закрытия файла: %v\n", err)
  95. }
  96. }()
  97. rw := bufio.NewReadWriter(bufio.NewReader(file), bufio.NewWriter(file))
  98. // Чтение первой строки
  99. line, err := rw.ReadString('\n')
  100. if err != nil {
  101. fmt.Printf("Ошибка чтения: %v\n", err)
  102. return
  103. }
  104. fmt.Printf("Прочитано %s", line)
  105. // Переход в конец файла для записи
  106. _, err = rw.WriteString("Добавленная строка\n")
  107. if err != nil {
  108. fmt.Printf("Ошибка записи: %v\n", err)
  109. return
  110. }
  111. // Сброс буфера
  112. if err := rw.Flush(); err != nil {
  113. fmt.Printf("Ошибка сброса буфера: %v\n", err)
  114. }
  115. }