【Go】操作文件读取写入追加,将读取到的内容分段写入多个新文件
代码写的不算精简,但是能用
仅供参考
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
)
func read() {
//打开文件
file, err := os.Open("D:/WWW/go/test/dom.txt")
if err != nil {
fmt.Println("文件打开失败 = ", err)
}
//及时关闭 file 句柄,否则会有内存泄漏
defer file.Close()
//创建一个 *Reader , 是带缓冲的
reader := bufio.NewReader(file)
count := 0
filecount := 0
fname := "0.txt"
for {
str, err := reader.ReadString('\n') //读到一个换行就结束
if err == io.EOF { //io.EOF 表示文件的末尾
break
}
if count > 999 {
count = 0
filecount += 1
fname = strconv.Itoa(filecount) + ".txt"
}
write(str, fname)
count++
}
fmt.Println("文件读取结束...")
}
func write(cont string, filename string) {
//创建一个新文件,写入内容
filePath := "D:/WWW/go/test/dom/" + filename
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("打开文件错误= %v \n", err)
return
}
//及时关闭
defer file.Close()
//写入内容
str := cont
//写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
writer.WriteString(str)
//因为 writer 是带缓存的,因此在调用 WriterString 方法时,内容是先写入缓存的
//所以要调用 flush方法,将缓存的数据真正写入到文件中。
writer.Flush()
}
func main() {
read()
}
最终创建出多个文件,每个文件1000行