golang文件操作之三个包
- Go
- 2020-05-30
- 437
- 0
使用 os包 进行指定字节读取文件
- 1.读取操作
// 打开指定路劲的文件, 得到 file指针结构体 和 err
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed, err:%v", err)
return
}
// 关闭文件 defer 是在函数结束前进行调用
defer fileObj.Close()
// 读取文件
// 定义一个 长度为128个字节的变量数组
var content [128]byte
for {
// Read需要传入切片
n, err := fileObj.Read(content[:])
if err == io.EOF {
// io 结束符号
fmt.Printf("读完了 \n")
return
}
if err != nil {
fmt.Printf("read from file failed, err:%v", err)
return
}
fmt.Printf("读取了%d个字节 \n", n)
fmt.Println(string(content[:n]))
}
2.写入操作
// 打开文件,没有则新建并设置每次清空写入,权限 0644
file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644)
if err != nil {
fmt.Println("open file failed, err: %v", err)
}
defer file.Close()
// 设置写入内容
str := "你好,这个是一个 os 文件写入示例"
// 1.将内容转换成字节切片
byteSlice := []byte(str)
// 写入文件
n, _ := file.Write(byteSlice)
fmt.Println(n)
// 2.直接写入字符串数据
str += "; 我是字符串"
file.WriteString(str)
使用ioutil包进行全部内容读取
1.读取操作
content1, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Printf("ioutil failed err:%v", err)
return
}
fmt.Println(string(content1))
2.写入操作
str := "hello , 我是ioutil"
err := ioutil.WriteFile("./test1.txt", []byte(str), 0644)
if err != nil {
fmt.Printf("write file failed,err:%v", err)
return
}
使用bufio包进行逐行读取
1.读取操作
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failde, err:%v", err)
return
}
defer fileObj.Close()
reader := bufio.NewReader(fileObj)
for {
line, err := reader.ReadString('\n')
if err == io.EOF {
fmt.Printf("eof \n")
return
}
if err != nil {
fmt.Printf("read line failed, err:%v", err)
return
}
fmt.Printf("%v", line)
}
2.写入操作
file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644)
if err != nil {
fmt.Printf("open file failed,err:%v", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString("hello, 我是 bufio \n") // 将数据写入缓存
}
writer.Flush() // 将缓存中的内容写入文件
使用io.Copy实现拷贝函数
func copyFile(dstName, srcName string) (written int64, err error) {
// 以读取方式打开源文件
src, err := os.Open(srcName)
if err != nil {
fmt.Printf("open %s failed, err:%v . \n", srcName, err)
return
}
defer src.Close()
// 以写|创建的方式打开目标文件
dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Printf("open %s failed,err: %v . \n", dstName, err)
return
}
defer dst.Close()
return io.Copy(dst, src) // 拷贝内容
}
func main() {
_, err := copyFile("dst.txt", "test.txt")
if err != nil {
fmt.Println("copy file failed ,err:", err)
return
}
fmt.Println("copy done!")
}