一、文件读操作
文件内容如下:
powershell
水陆草木之花,可爱者甚蕃。
晋陶渊明独爱菊。自李唐来,世人甚爱牡丹。
予独爱莲之出淤泥而不染,濯清涟而不妖,中通外直,不蔓不枝,香远益清,亭亭净植,可远观而不可亵玩焉。
予谓菊,花之隐逸者也;
牡丹,花之富贵者也;
莲,花之君子者也。
噫!菊之爱,陶后鲜有闻。
莲之爱,同予者何人?牡丹之爱,宜乎众矣!
1.按行读取方式一
go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
//打开文件
file, _ := os.Open("./file/data.txt")
//创建一个文件阅读器,将文件句柄传递给阅读器
reader := bufio.NewReader(file)
//使用阅读器,按照行开始读取
data, _, _ := reader.ReadLine()
data1, _, _ := reader.ReadLine()
data2, _, _ := reader.ReadLine()
fmt.Println("data = ", string(data))
fmt.Println("data1 = ", string(data1))
fmt.Println("data2 = ", string(data2))
file.Close()
}
执行结果如下:
powershell
data = 水陆草木之花,可爱者甚蕃。
data1 = 晋陶渊明独爱菊。自李唐来,世人甚爱牡丹。
data2 = 予独爱莲之出淤泥而不染,濯清涟而不妖,中通外直,不蔓不枝,香远益清,亭亭净植,可远观而不可亵玩焉。
2.按行读取方式二
reader.Readline()函数读取出来得内容是字节串,需要使用string转换一下数据。这时候另外一种方式就出现了,那就是reader.Readstring()
go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, _ := os.Open("./file/data.txt")
reader := bufio.NewReader(file)
data, _ := reader.ReadString('\n')
data1, _ := reader.ReadString('\n')
data2, _ := reader.ReadString('\n')
fmt.Println("data = ", data)
fmt.Println("data1 = ", data1)
fmt.Println("data2 = ", data2)
file.Close()
}
按照一定行数读取
go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, _ := os.Open("./file/data.txt")
reader := bufio.NewReader(file)
//读取10行
for i := 0; i <= 10; i++ {
data, _ := reader.ReadString('\n')
if data != "" {
fmt.Print("data = ", data)
}
}
file.Close()
}
3.读取文件全部内容
适用于读取小文件.
go
package main
import (
"fmt"
"io/ioutil"
)
func main() {
//ioutil默认会打开文件
data, _ := ioutil.ReadFile("./file/data.txt")
fmt.Println("data = ", string(data))
}
二、文件写操作
1.按行写入数据
go
package main
import (
"os"
)
func main() {
data := "我是一条测试数据\n"
file_path := "./file/data2.txt"
file, _ := os.OpenFile(file_path, os.O_CREATE|os.O_APPEND, 0666)
file.WriteString(data)
file.Close()
}
2.读内容并写入新文件
go
package main
import (
"io/ioutil"
)
func main() {
read_file_path := "./file/data.txt"
write_file_path := "./file/data3.txt"
data, _ := ioutil.ReadFile(read_file_path)
ioutil.WriteFile(write_file_path, data, 0666)
}