Go语言-文件读取访问案例
文件读取
一次性读取
package ioutil
eg:
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// 直接打开与读取
filePath := "F:/a.txt"
content, err := ioutil.ReadFile(filePath) // 返回值为[]byte数组
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(content)) // 我们需要转成string
}
带缓冲读取
package os & bufio
eg:
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 1.打开
file, err := os.Open("F:/a.txt")
if err != nil {
fmt.Println(err)
}
fmt.Println(file)
reader := bufio.NewReader(file)
// 2.读取
for {
s, err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Print(s)
}
// 3.关闭
err = file.Close()
if err != nil {
fmt.Println(err)
}
}
文件写入
一次性写入
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// 1.一次性写入
// 2.如果文件不存在就创建,如果存在就覆盖
// 3.以字符切片的形式写入
filePath := "F:/a.txt"
data := []byte{'1', '2', '3', '4'}
err := ioutil.WriteFile(filePath, data, 0666)
if err != nil {
fmt.Println(err)
}
}
带缓冲写入
eg:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 1.打开
filePath := "F:/abc.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0000) // 写入与创建方式打开
if err != nil {
fmt.Println(err)
return
}
defer file.Close() // 写入完毕后要关闭文件
// 2.写入
str := "hello world\n" // \n如果不换行可试用\r
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
writer.Flush() // 要刷新缓冲才能写入
}
DOGE奖励程序案例
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
"time"
)
func main() {
filePath := "C:/DOGEGAIN.txt"
file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
if err != nil {
return
}
defer file.Close()
sum, t := 0, 0
reader := bufio.NewReader(file)
var str string
for {
str, err = reader.ReadString('\n')
if err == io.EOF {
break
}
t, _ = strconv.Atoi(strings.Split(str, "\t")[0])
sum += t
}
fmt.Println("SUM:", sum)
writer := bufio.NewWriter(file)
_, err = fmt.Scan(&t)
if err != nil {
return
}
for {
sum += t
str = strconv.Itoa(t) + "\t" + time.Now().Format("01.02-03:04:05") + "\tSUM:" + strconv.Itoa(sum) + "\n"
writer.WriteString(str)
writer.Flush()
_, err = fmt.Scan(&t)
if err != nil {
return
}
}
}