一、go读写txt文本文件

1、行数据写入txt

package main

import (
	"bufio"
	"log"
	"os"
	"strconv"
	"strings"
)

func main() {
	WriteTxt()
}

func WriteTxt() {
	// 打开文件路径 "D:/helloworld.txt"
	// 只写方式打开 os.O_WRONLY
	// os.FileMode(0600) 文件权限:windows系统权限失效。
	file, err := os.OpenFile("D:/helloworld.txt", os.O_WRONLY, 0)
	if err != nil {
		log.Fatal(err)
	}
	// 关闭文件
	defer file.Close()
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			// 写入一行
			_, err := file.WriteString(strconv.Itoa(j) + " ")
			if err != nil {
				log.Fatal(err)
			}
		}
		file.WriteString("\r\n")
	}
}

2、行数据读取txt

package main

import (
	"bufio"
	"log"
	"os"
	"strconv"
	"strings"
)

func main() {
	ReadTxt()
}

func ReadTxt() {
	file, err := os.Open("D:/helloworld.txt")
	if err != nil {
		log.Fatal(err)
		return
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text()
		strArr := strings.Split(line, " ")
		for str := range strArr {
			print(str, " ")
		}
		println()
	}
}

3、文件的打开方式

1、os.O_RDONLY

只读方式打开文件,os.Open(filePath) 使用os.O_RDONLY打开文件,此时写入会返回错误 Access is denied.

func ReadTxt() {
	file, err := os.Open("D:/helloworld.txt")
	if err != nil {
		log.Fatal(err)
		return
	}
	defer file.Close()
	n, err := file.WriteString("只读方式打开进行写入操作")
	if err != nil {
		// 打印错误 系统退出
		log.Fatal(err)
	}
	println("写入字节数", n)
}

2、os.O_WRONLY

1、以只写的方式打开文件,读取不到内容

func ReadTxt() {
	file, err := os.OpenFile("D:/helloworld.txt", os.O_WRONLY, 0)
	if err != nil {
		log.Fatal(err)
		return
	}
	defer file.Close()
	scanner := bufio.NewScanner(file)
	if scanner.Scan() {
		println("可读")
	} else {
		// 程序打印:不可读
		println("不可读")
	}
}

2、以只写的方式打开文件,写入时会覆盖文件原始内容

func WriteTxt() {
	file, err := os.OpenFile("D:/helloworld.txt", os.O_WRONLY, 0)
	if err != nil {
		log.Fatal(err)
	}
	// 关闭文件
	defer file.Close()

	file.WriteString("李四爱吃梨")
}

文件原始内容:张三爱吃苹果
执行代码以后:李四爱吃梨果

3、os.O_APPEND

1、追加方式写文件:

func WriteTxt() {
	file, err := os.OpenFile("D:/helloworld.txt", os.O_APPEND, 0)
	if err != nil {
		log.Fatal(err)
	}
	// 关闭文件
	defer file.Close()

	n, err := file.WriteString("李四爱吃梨")
	if err != nil {
		log.Fatal(err)
	}
	println("写入字节数", n)
}

文件原始内容:张三爱吃苹果
执行代码以后:张三爱吃苹果李四爱吃梨。
2、追加方式读文件:

func ReadTxt() {
	file, err := os.OpenFile("D:/helloworld.txt", os.O_APPEND, 0)
	if err != nil {
		log.Fatal(err)
		return
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		println(scanner.Text())
	}
}

执行代码以后:张三爱吃苹果李四爱吃梨

4、os.O_RDWR

读写方式打开,即可读也可写。

5、os.O_CREATE

创建方式打开文件,文件不存在时会创建文件。